gpt4 book ai didi

docker - sed内联替换不适用于Dockerfile

转载 作者:行者123 更新时间:2023-12-02 08:18:02 25 4
gpt4 key购买 nike

我正在尝试为杯子创建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),则更改将按预期进行。

这是完整的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

构建命令为: 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

谢谢

最佳答案

问题出在:

VOLUME /etc/cups/

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

将音量线移到末尾,或者最好将其从图像中完全删除。这些条目阻止以后通过更改此文件夹来扩展图像的功能。而且,您随时可以在所需的位置(或在docker-compose.yml中)使用 docker run -v ...制作自己的卷。在镜像中创建卷意味着运行镜像后,您将获得在 docker volume ls中列出的匿名卷。

关于docker - sed内联替换不适用于Dockerfile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40074498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com