我正在尝试为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
为什么第一次呼叫sed
被grep
传送到-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}}
由于
答案 0 :(得分:5)
问题在于:
VOLUME /etc/cups/
在该行之后,可能无法在最终容器中看到对/ etc / cups的任何更改(某些单个文件复制命令确实适用,因此它并不完美)。
将体积线移动到最后,或者最好将其从图像中完全移除。这些条目阻止了以后更改此文件夹扩展图像的功能。您可以随时使用docker run -v ...
创建自己的音量(或者在您的docker-compose.yml中)。在图像中创建卷意味着您在运行图像后会在docker volume ls
中获得匿名卷。