/etc/hosts
「docker build」中にファイルを更新したい。
Dockerfileの以下の行を追加しましたが、/etc/hosts
ファイルの更新でもエラーの発生でもありません。
RUN echo "192.168.33.11 mynginx" >> /etc/hosts
更新する必要があり/etc/hosts
ます。誰もがこれについて提案できますか?
/etc/hosts
「docker build」中にファイルを更新したい。
Dockerfileの以下の行を追加しましたが、/etc/hosts
ファイルの更新でもエラーの発生でもありません。
RUN echo "192.168.33.11 mynginx" >> /etc/hosts
更新する必要があり/etc/hosts
ます。誰もがこれについて提案できますか?
回答:
最近のバージョンのdockerでは、これはdocker-composeとそのディレクティブで実行できますextra_hosts
ホスト名マッピングを追加します。クライアントパラメーター
と同じ値を使用します(Docker 1.8で既に使用可能になっているはずです)。docker run
--add-host
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
つまり/etc/hosts
、ビルドではなく、実行時にコンテナを変更します。
Docker 17.x +では、以下のdocker build --add-host
ように説明されていますが、問題34078とこの回答でコメントされています:
--add-host
ビルド中の機能は、ビルド中にホストを上書きできるように設計されていますが、その構成をイメージに永続化することはできません。
前述のソリューションは、上記で提案したdocker-composeを参照しています。
- 内部DNSを実行します。デーモンで使用するデフォルトのDNSサーバーを設定できます。このようにして、開始されたすべてのコンテナーは、デフォルトで構成済みのDNSを自動的に使用します
- docker composeを使用し
docker-compose.yml
て、開発者にを提供します。
docker composeファイルを使用すると、コンテナーを開始するときに使用する必要があるすべてのオプションを指定できるため、開発者はdocker composeを使用して、設定する必要のあるすべてのオプションでコンテナーを開始できます。
docket exec -it <container name> /bin/bash
/ ect / hostの下のドッカーのコンテナホストを任意のコマンドラインエディタ(vim、emacs、nano、echo ''。>> />)で更新できます。
イメージからコンテナを起動すると、Dockerデーモンはファイル(/ etc / hosts)とその内容(ホストエントリ)を維持するためecho
、RUN
ステップを使用してイメージ内のホストファイルを変更することはできません。
ただし、以下を使用して同じことを達成できます。
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 " ]
ここで注意すべき重要な点は、exec
Dockerのドキュメントに示されているコマンドの使用です。execを使用すると、javaコマンドがコンテナーのPID 1になります。Docker割り込みはそれにのみ応答します。
https://docs.docker.com/engine/reference/builder/#entrypointを参照してください
ENTRYPOINT
は、画像の指示ではありません。このイメージからコンテナーを実行するときにのみエントリーポイントをマークします。つまり、ホストエントリーはコンテナーの実行後にのみ存在します。要件は必須ではないと思います。誤解があるに違いない。
dockerは最近--add-host
docker buildにフラグを追加したと思います。これは本当に素晴らしいことです。
[編集]この機能は17.04.0-ceで更新されました
使用方法の詳細についてはdocker build
を--add-host
ご覧くださいフラグ:https://docs.docker.com/edge/engine/reference/commandline/build/
--add-host
機能は、CentOS上のDocker 12で利用できます。
これが誰にとっても便利であれば、HOSTALIASES
env変数は私にとってはうまくいきました:
echo "fakehost realhost" > /etc/host.aliases
export HOSTALIASES=/etc/host.aliases
hosts
Dockerコンテナーに追加する独自のファイルを準備します。1.2.3.4 abc.tv
5.6.7.8 domain.xyz
1.3.5.7 odd.org
2.4.6.8 even.net
hosts
次の行を追加して、ファイルをコンテナにコピーします。Dockerfile
COPY hosts /etc/hosts_extra
ENTRYPOINT
か、CMD
またはCRON
ジョブがそれにか、少なくとも次のコマンドラインを実行している組み込むコンテナ内でこれを実行します。cat /etc/hosts_extra >> etc/hosts;
Dockerfile
変更が失われるため、に以下を追加することはできません。RUN cat /etc/hosts_extra >> etc/hosts;
ドッカーのビルドではなくドッカーの実行中にファイルをマウントすることで、私のために働いた
docker service create --name <name> --mount type=bind,source=/etc/hosts,dst=/etc/hosts <image>