How to edit /etc/hosts file in running docker container How to edit /etc/hosts file in running docker container docker docker

How to edit /etc/hosts file in running docker container


Depends upon what sort of modifications you want to do. If you just need to add more hosts, you can probably do it within docker run command like -

docker run --add-host="localA:127.0.0.1" --add-host="localB:172.0.0.1" ....

This link might be useful as well :- https://github.com/docker/docker/issues/10324


The recommended solution is to use the --add-host option to docker run or the equivalent in the docker-compose.yml file if you're using docker-compose.

BUT, I was in the same boat as you. I have a script that modifies the hosts file that I wanted to run in the container, so what I did was COPY the script into the container and make it executable, then in the Dockerfile's CMD script that your choose, call your script to modify the hosts file

Works

in Dockerfile

# add the modifyHostsFile script, make it executableCOPY ./bash-scripts/modifyHostsFile.sh /home/user/modifyHostsFile.shRUN sudo chmod +x /home/user/modifyHostsFile.sh# run the script that starts servicesCMD ["/bin/bash", "/home/user/run.sh"]

And in the run.sh script I execute that script to modify the hosts file

# modify the hosts filebash ./modifyHostsFile.sh

Doesn't Work

in Dockerfile

# add the modifyHostsFile script, make it executableCOPY ./bash-scripts/modifyHostsFile.sh /home/user/modifyHostsFile.shRUN sudo chmod +x /home/user/modifyHostsFile.sh# modify the hosts file right nowRUN bash /home/user/modifyHostsFile.sh    # run the script that starts servicesCMD ["/bin/bash", "/home/user/run.sh"]

You have to run the script that modifies your hosts file during your CMD script. If you run it via RUN bash ./modifyHostsFile.sh in your Dockerfile it will be added to that container, but then Docker will continue to the next step in the Dockerfile and create a new container (it creates a new intermediary container for each step in the Dockerfile) and your changes to the /etc/hosts will be overridden.


I had the same problem and overcome it with vi in ex mode.

ex -sc '%s/foo/bar/g|x' /etc/hosts