sed内联替换无法使用Dockerfile

时间:2016-10-16 19:26:31

标签: docker sed dockerfile

我正在尝试为cups创建一个Docker镜像,我想要执行的其中一个步骤是注释掉“Listen”指令。示例构建的此输出演示了此问题:

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

为什么第一次呼叫sedgrep传送到-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 ),则按预期进行更改。

这是完整的Dockerfile:

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 1.12.1, build 23cf638 的输出:

{{1}}

由于

1 个答案:

答案 0 :(得分:5)

问题在于:

VOLUME /etc/cups/

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

将体积线移动到最后,或者最好将其从图像中完全移除。这些条目阻止了以后更改此文件夹扩展图像的功能。您可以随时使用docker run -v ...创建自己的音量(或者在您的docker-compose.yml中)。在图像中创建卷意味着您在运行图像后会在docker volume ls中获得匿名卷。