sed内联replace不能从Dockerfile工作

我正在尝试为杯子创build一个Docker镜像,我想要执行的其中一个步骤是注释掉“Listen”指令。 来自样本构build的这个输出显示了这个问题:

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 

为什么第一个调用sed调用grep工作得很好,但是第二个用-i标志调用不了?

如果我以交互方式运行容器( docker run -it cups sh )并复制并粘贴命令( sed -i "s/^Listen /#Listen /" /etc/cups/cupsd.conf ), sed -i "s/^Listen /#Listen /" /etc/cups/cupsd.conf预期进行更改。

以下是完整的Dockerfile:

 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 

构build命令是: docker build --tag cups:test .

运行命令是: 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 

docker --version输出docker --version

 Docker version 1.12.1, build 23cf638 

谢谢

问题在于:

 VOLUME /etc/cups/ 

在那一行之后,在最后一个容器中可能看不到/ etc / cups的任何更改(某些单个文件复制命令确实适用,因此它不是完美的)。

请将您的卷线移动到最后,或者最好将其从您的图像中完全移除。 这些条目会阻止稍后扩展您的映像并更改此文件夹的function。 您可以随时使用docker run -v ...自己想要的地方(或在docker-compose.yml中)制作自己的音量。 在图像中创build卷表示在运行图像后,您将在docker volume ls列出匿名卷。