web-dev-qa-db-ja.com

実行中のDockerコンテナで/ etc / hostsファイルを編集する方法

Dockerコンテナの/ etc/hostsファイルにいくつかの設定を保存する必要があるアプリケーションに取り組んでいます。多くのオプションで試してみましたが、実行時に/ etc/hostsファイルを変更する正しい方法が見つかりませんでした。

DockerfileまたはJavaコードのいずれかで実行したい。dockerイメージをビルドして/ etc/hostsファイルを手動で変更することはできますが、残念ながらそれはプロジェクトの要件ではありません。

7
Vinay Pandey

実行する変更の種類によって異なります。さらにホストを追加する必要がある場合は、dockerrunコマンド内で次のように追加できます。

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

このリンクも役立つかもしれません: https://github.com/docker/docker/issues/10324

7
Avichal Badaya

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への変更は上書きされます。

5
ejfrancis

私は同じ問題を抱えていて、viモードのexでそれを克服しました。

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

0
Govind Kailas