2021년 9월 21일 화요일

docker-compose시 ARG에 빈 값이 넘어오던 문제

졸업 작품을 준비하면서 L4T-Tensorflow에 추가적으로 내 프로젝트가 제공하는 파일과 기타 필요로한 설치를 한꺼번에 할 수 있도록 Dockerfile과 docker-compose.yml을 이용하기로 했다.

내 처음 도커파일은 다음과 같다
# 1. l4t-tensorflow의 이미지를 가져온 다음 base 이미지로 명칭 설정, 시스템 업데이트를 수행
# 2. 현재 docker-compose를 실행한 위치 (복제한 리포지토리 위치)의 내용을 모두 새로 생성될 
#    도커 이미지로 복사 
# 3. Python에서 GStreamer 사용하는데 필요한 기타 파일들을 받는다.
# 4. 이후에 두개의 branch로 나눈다. 하나는 디버그용 그리고 디버그가 아닌 이미지
# 5. 모든 branch를 위한 이미지가 생성되면 DEBUG의 값을 참조하여 요청된 이미지를 
#    최종 이미지로 선정하고 docker-compose에 따라 이미지를 꾸며준다. 
ARG DEBUG

FROM nvcr.io/nvidia/l4t-tensorflow:r32.5.0-tf2.3-py3 AS base

RUN apt-get update
RUN apt-get purge -y gnome* ubuntu-desktop
RUN apt-get autoremove
RUN apt-get clean
RUN apt-get upgrade -y

ENV DIR=/root/sopoware-panoptes
RUN mkdir $DIR
WORKDIR ${DIR}
COPY ./ ./
RUN chmod +x ./start.sh

RUN apt-get install -y gstreamer1.0-tools gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav
RUN apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev libgstreamer-plugins-bad1.0-dev;
RUN apt-get install -y python3-gi python3-gst-1.0

FROM base AS RUNTYPE-1
RUN echo "Building Debug mode..."
RUN apt-get install -y lighttpd iptables
# iptables setting. TODO
RUN service lighttpd start
RUN cp ./demo/index.html /var/www/html/index.lighttpd.html

FROM base AS RUNTYPE-0
RUN echo "Building Batch mode..."

FROM RUNTYPE-${DEBUG} AS final
ENTRYPOINT $DIR/start.sh
FROM에서 AS에 사용한 이미지 이름에 대문자를 사용해서 오류가 발생했고, 이후에는 알수없는 invalid reference format이라는 에러를 계속해서 받았다. 이유를 찾기 위해 DEBUG 값 (빌드 명령인자로 받기로 설정한 값)을 echo로 꺼내보니 비어있는 것을 확인했다.

FROM 이전에 있는 ARG는 DEBUG 인자의 값을 받아왔지만 문제는 base 이미지를 만들때 해당 ARG가 설정되지 않는다는 것이다. 그래서 ARG를 base의 안쪽으로 옮기고 확인해보니 값이 정상적으로 넘어왔다. 하지만, 마지막 FROM에서 해당 ARG 값을 받아오자 다시 빈 값이 넘어오는 것이다. 그래서 처음에 ARG를 선언하고, 다시 base 이미지를 생성할때 ARG를 한번 더 설정하니 다음부터 모든 ARG DEBUG의 값이 정상적으로 들어가기 시작했다.

댓글 없음:

댓글 쓰기

[번] Callback 지옥, Promises, 그리고 Async/Await

원문:  https://blog.avenuecode.com/callback-hell-promises-and-async/await  Callbacks와 promises, 그리고 async/await을 쓰는 비동기 자바스크립트는 반환하는데 시간이 소요되는...