qkrijger
qkrijger

Reputation: 27256

Docker RUN statement (modifying a file) not executed

I am experiencing strange behavior when executing a Dockerfile (in https://github.com/Krijger/es-nagios-docker). Basically, I add a file to append its contents to a file in the image

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

The problem is that, while /tmp/es-command is present in the resulting image, the commands.cfg file was not changed.

As a prelude to the accepted answer: my Dockerfile extends cpuguy83/nagios, which defines /opt/nagios/etc as a volume.

Upvotes: 0

Views: 406

Answers (2)

cpuguy83
cpuguy83

Reputation: 5993

Here is how I use it:

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

Upvotes: 1

Larry Cai
Larry Cai

Reputation: 60123

Good to the see sample code, which find the route cause.

Your docker image comes from cpuguy83/nagios, from this image https://github.com/cpuguy83/docker-nagios/blob/master/Dockerfile

You can see /opt/nagios/etc directory is set as VOLUME

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

Then you can notice that docker volume can't be changed at the next commit by your new build.

And this is the reason you can see your changes when you enter into the container and lost it when exits.

Upvotes: 1

Related Questions