RUNでDockerfileから/ etc / hostsファイルに書き込めません


9

私はかなりシンプルなDockerfileを使用してDockerイメージを作成しています。Dockerfile内に次のコマンドがあります。

RUN printf "192.92.13.243 www.hahaha.com \n" >> /etc/hosts

この時点ではイメージの作成は停止しないため、コマンド自体は問題ないようです。

問題は次のとおりです。イメージを実行すると、「/ etc / hosts」内に挿入されているはずの行がそこにありません。

今、私は周りを検索しましたが、バージョン1.2以前のdockerでは、コンテナー内のホストファイルに問題があることがわかりました。私の場合、現時点で最新のバージョン1.5を使用しています。

何か不足していますか?

更新1:

dockerのgithubページには、オープンとクローズの両方で多くの問題があるようです。

回答:


12

これはdocker 1.7.0で動作します

RUN echo "192.168.11.112 myhost" >> /etc/hosts && wget http://myhost

トリックは、使用するのと同じ行にホスト名を追加することです。そうしないと、すべてのRUNコマンドが新しい中間コンテナを開始するため、hostsファイルがリセットされます。たとえば、これは機能しません

RUN echo "192.168.11.112 myhost" >> /etc/hosts
RUN wget http://myhost

1
洞察をありがとう!正しい(私がチェックした)と一般的には便利ですが、この場合は実際には役に立ちません。コンテナーの実行時に「hosts」ファイルにデータを入力する必要があります。
dlyk1988

2
同じ行でコマンドを実行する場合は+1
myol

7

私の質問に対する更新を書いた後、私はgithubで開かれた「問題」をもう1度見直すことにしました。結局、回避策が実装されました:

docker run ... --add-host='server:0.0.0.0' ...

コンテナの起動時に「--add-host ...」引数を使用すると、hostsファイルを変更できます。


5
ビルドでこれを実行できるようにしたいのですが。コンテナを実行する人は、内部ホストについて知っている必要はありません。意味がありません!
samsamm777

@ samsamm777をエコーし​​ます。それを行う良い方法があるのだろうか?
ジョナサン

これは本当に非常に ITシステムには良いアイデアです決して驚くべき行動、。
Torsten Bronger 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.