컵 용 Docker 이미지를 만들려고하고 있는데, 수행하고 싶은 단계 중 하나는 "Listen"지시어를 주석 처리하는 것입니다.Dockerfile에서 sed 인라인 대체가 작동하지 않습니다.
Step 8 : RUN sed "s/^Listen /#Listen /" /etc/cups/cupsd.conf | grep Listen
---> Running in 6b9dfeeaec7a
#Listen localhost:631
#Listen /var/run/cups/cups.sock
---> 1737a534589d
Step 9 : RUN sed -i "s/^Listen /#Listen /" /etc/cups/cupsd.conf
---> Running in aacd768eb94c
---> dbe12c2073ef
Step 10 : RUN grep "Listen" /etc/cups/cupsd.conf
---> Running in 650b27ecf7c4
Listen localhost:631
Listen /var/run/cups/cups.sock
---> bf03b9f5de35
Successfully built bf03b9f5de35
왜 완벽 grep
작업에 파이프됩니다 sed
에 대한 첫 번째 호출하지만, -i
플래그 두 번째는 변경하지 않습니다 샘플 빌드에서이 출력은 문제를 보여줍니다?
컨테이너를 대화 형으로 실행하고 (docker run -it cups sh
) 명령을 복사하여 붙여 넣으면 (sed -i "s/^Listen /#Listen /" /etc/cups/cupsd.conf
) 예상대로 변경됩니다.
FROM ubuntu:16.04
RUN apt-get --quiet update && apt-get --quiet --assume-yes --allow-downgrades --allow-remove-essential --allow-change-held-packages dist-upgrade
# Install cups
RUN apt-get install --quiet --assume-yes --allow-downgrades --allow-remove-essential --allow-change-held-packages cups
VOLUME /etc/cups/
EXPOSE 631
RUN apt-get install --quiet --assume-yes --allow-downgrades --allow-remove-essential --allow-change-held-packages less vim
RUN sed -i "s/^Listen /#Listen /" /etc/cups/cupsd.conf
빌드 명령은 다음과 같습니다 : docker build --tag cups:test .
실행 명령은 다음과 같습니다
여기에 전체 Dockerfile의 docker run -it cups:test bash
docker info
출력 :
Containers: 9
Running: 6
Paused: 0
Stopped: 3
Images: 61
Server Version: 1.12.1
Storage Driver: aufs
Root Dir: /mnt/storage/var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 65
Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: host bridge null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options: apparmor
Kernel Version: 4.4.0-31-generic
Operating System: Ubuntu 16.04.1 LTS
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 3.555 GiB
Name: servy
ID: LJZV:A2VY:BZPY:HHQX:DWSP:IAMK:XI43:Q7BA:YKVU:ONQX:VBHJ:GXRT
Docker Root Dir: /mnt/storage/var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
WARNING: No swap limit support
Insecure Registries:
127.0.0.0/8
출력을에서 118,443,210 :
Docker version 1.12.1, build 23cf638
감사
Dockerfile 전체를 게시하십시오. 문제를 재현하려고했지만 인라인 대체 작업이 필요합니다. –
또한,'docker info'의 출력이 도움이 될 것입니다. –
둘러보기 주셔서 감사합니다! 나는'docker info'와 나를 위해 문제를 재현하는 완전한 Dockerfile을 추가했습니다. 나는 실제로 이미지를 도매로 복사 한 빌드 디렉토리에 전체 설정 파일을 두어 실제로이 작업을 실행했지만,'sed '를 사용하는 빌드가 작동하지 않는 이유는 여전히 궁금합니다. 너무 광범위하지 않은 한, 설정 파일에 대한 특정 편집 내용을 패키지 관리자의 버전의 구성 파일에 정확히 변경 한 내용을 더 잘 문서화 한 것입니다. 나는 또한 그것에 대한 의견을 사용할 수있을 것 같아요. – Dave