Docker RUN语句(修改文件)未执行

时间:2014-05-30 16:43:09

标签: bash shell docker

执行Dockerfile时遇到奇怪的行为(在https://github.com/Krijger/es-nagios-docker中)。基本上,我添加一个文件将其内容附加到图像中的文件

ADD es-command /tmp/
RUN cat tmp/es-command >> /opt/nagios/etc/objects/commands.cfg

问题是,虽然生成的图像中存在 / tmp / es-command ,但 commands.cfg 文件未更改。

作为接受答案的前奏:我的Dockerfile扩展了 cpuguy83 / nagios ,它将 / opt / nagios / etc 定义为卷。

2 个答案:

答案 0 :(得分:1)

查看示例代码很好,找到路由原因。

您的泊坞窗图片来自cpuguy83/nagios,来自此图片https://github.com/cpuguy83/docker-nagios/blob/master/Dockerfile

您可以看到/opt/nagios/etc目录设置为 VOLUME

 VOLUME ["/opt/nagios/var", "/opt/nagios/etc", "/opt/nagios/libexec", "/var/log/apache2", "/usr/share/snmp/mibs"]

然后您可以注意到新版本在下一次提交时无法更改docker volume

这就是您在进入容器时可以看到更改并在退出时丢失的原因。

答案 1 :(得分:1)

以下是我如何使用它:

ls ./
    configure.sh
    commands.cfg

cat configure.sh
    #!/bin/bash
    script_path=$( cd "$( dirname "$0" )" && pwd )
    cp ${script_path}/commands.cfg /opt/nagios/etc/objects/



docker run -d --name nagios cpuguy83/nagios
docker run --rm -v $(pwd):/tmp --volumes-from nagios --entrypoint /tmp/configure.sh cpuguy83/nagios