「docker build」中に/etc/hosts
ファイルを更新したい。
Dockerfileに以下の行を追加しましたが、/etc/hosts
ファイルの更新もエラーの表示もしていません。
RUN echo "192.168.33.11 mynginx" >> /etc/hosts
/etc/hosts
を更新する必要があります。誰でもこれについて提案できますか?
より新しいバージョンのdockerでは、これはdocker-composeとその extra_hosts
ディレクティブ で実行できます
ホスト名マッピングを追加します。
docker run
client--add-Host
parameter と同じ値を使用します(これは、Docker 1.8で既に使用可能になっているはずです)。
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
要するに、コンテナをビルドするのではなく、実行するときにコンテナの/etc/hosts
を変更します。
Docker 17.x +では、 docker build --add-Host
が言及されています below が、 、 issue 34078 および this answer でコメントされているように:
ビルド中の
--add-Host
機能は、ビルド中にホストを上書きできるように設計されていますが、その構成をイメージに保持することはできません。
上記の解決策は、上記で提案したdocker-composeを参照しています。
- 内部DNSを実行します。デーモンで使用するデフォルトのDNSサーバーを設定できます。こうすることで、起動されたすべてのコンテナはデフォルトで設定されたDNSを自動的に使用します
- Docker composeを使用して、開発者に
docker-compose.yml
を提供します。
Docker作成ファイルを使用すると、コンテナを起動するときに使用するすべてのオプションを指定できるため、開発者は、設定する必要があるすべてのオプションでコンテナを起動するためにdockerを作成できます。
echo
ステップでRUN
を使用してイメージ内のHostファイルを変更することはできません。これは、イメージからコンテナーを開始するときにdockerデーモンがファイル(/ etc/hosts)とそのコンテンツ(hostsエントリー)を維持するためです。
ただし、以下を使用して同じことを実現できます。
ENTRYPOINT ["/bin/sh", "-c" , "echo 192.168.254.10 database-server >> /etc/hosts && echo 192.168.239.62 redis-ms-server >> /etc/hosts && exec Java -jar ./botblocker.jar " ]
ここで注意すべき重要な点は、dockerのドキュメントが示唆するようにexec
コマンドを使用することです。 execを使用すると、JavaコマンドがコンテナのPID 1として作成されます。 Docker割り込みはそれにのみ応答します。
https://docs.docker.com/engine/reference/builder/#entrypoint を参照してください
Dockerは--add-Host
フラグをdockerビルドに最近追加したと思いますが、これは本当に素晴らしいです。
[編集]この機能は 17.04.0-ce で更新されました
docker build
を--add-Host
フラグとともに使用する方法の詳細については、以下を参照してください。 https://docs.docker.com/Edge/engine/reference/commandline/build/
これはまだGoogleの最初の回答として浮上しているので、可能な解決策を提供します。
here から取ったコマンドは、驚くほどうまく機能しました(Docker 1.13.1、Ubuntu 16.04):
docker exec -u 0 <container-name> /bin/sh -c "echo '<ip> <name> >> /etc/hosts"
これが誰にとっても有用であれば、HOSTALIASES
env変数は私のために働いた:
echo "fakehost realhost" > /etc/Host.aliases
export HOSTALIASES=/etc/Host.aliases
Dockerの実行時に次のコマンドを実行できます
docker run [OPTIONS] <your-image-name>:<your tag> --add-Host example.com:127.0.0.1
ここで、example.com
をlocalhost 127.0.0.1
にマッピングし、その動作を確認しています。
AWS Elasticbeanstalk + Docker + Supervisordを使用しています。
Dockerfile
にコードを追加するだけです。
CMD echo 123.123.123.123 this_is_my.Host >> /etc/hosts; supervisord -n;
Tis is me Dockefile
FROM XXXXX
ENV DNS_1="10.0.0.1 TEST1.COM"
ENV DNS_1="10.0.0.1 TEST2.COM"
CMD ["bash","change_hosts.sh"]`
#cat change_hosts.sh
su - root -c "env | grep DNS | akw -F "=" '{print $2}' >> /etc/hosts"