Dockerコンテナの/ etc/hostsファイルにいくつかの設定を保存する必要があるアプリケーションに取り組んでいます。多くのオプションで試してみましたが、実行時に/ etc/hostsファイルを変更する正しい方法が見つかりませんでした。
DockerfileまたはJavaコードのいずれかで実行したい。dockerイメージをビルドして/ etc/hostsファイルを手動で変更することはできますが、残念ながらそれはプロジェクトの要件ではありません。
実行する変更の種類によって異なります。さらにホストを追加する必要がある場合は、dockerrunコマンド内で次のように追加できます。
docker run --add-Host="localA:127.0.0.1" --add-Host="localB:172.0.0.1" ....
このリンクも役立つかもしれません: https://github.com/docker/docker/issues/10324
Docker-composeを使用している場合は、--add-Host
オプションをdocker run
またはdocker-compose.yml
ファイル内の同等のオプションに使用することをお勧めします。
しかし、私はあなたと同じ船に乗っていました。コンテナで実行したいhostsファイルを変更するスクリプトがあるので、スクリプトをコンテナにCOPY
して実行可能にし、DockerfileのCMD
スクリプトで実行しました。選択した場合は、スクリプトを呼び出してホストファイルを変更します
dockerfileで
# add the modifyHostsFile script, make it executable
COPY ./bash-scripts/modifyHostsFile.sh /home/user/modifyHostsFile.sh
RUN Sudo chmod +x /home/user/modifyHostsFile.sh
# run the script that starts services
CMD ["/bin/bash", "/home/user/run.sh"]
そして、run.sh
スクリプトで、そのスクリプトを実行してホストファイルを変更します
# modify the hosts file
bash ./modifyHostsFile.sh
dockerfileで
# add the modifyHostsFile script, make it executable
COPY ./bash-scripts/modifyHostsFile.sh /home/user/modifyHostsFile.sh
RUN Sudo chmod +x /home/user/modifyHostsFile.sh
# modify the hosts file right now
RUN bash /home/user/modifyHostsFile.sh
# run the script that starts services
CMD ["/bin/bash", "/home/user/run.sh"]
CMD
スクリプト中に、hostsファイルを変更するスクリプトを実行する必要があります。 DockerfileでRUN bash ./modifyHostsFile.sh
を介して実行すると、そのコンテナーに追加されますが、DockerはDockerfileの次のステップに進み、新しいコンテナーを作成します(Dockerの各ステップに新しい中間コンテナーを作成します) Dockerfile)および/etc/hosts
への変更は上書きされます。
私は同じ問題を抱えていて、vi
モードのex
でそれを克服しました。
ex -sc '%s/foo/bar/g|x' /etc/hosts