2017-02-20 9 views
1

私はsockt-native-packagerのdockerプラグインを使ってDockerイメージを構築しています。私のイメージには、/ etc/hostsに追加のエントリがあることを望みます。sbt-native-packager docker:/ etc/hostsにエントリを追加する方法

私は次のことを試してみた:

dockerCommands in Docker := dockerCommands.value.flatMap { 
    case [email protected]("FROM", _) => 
    List(Cmd("FROM", "anapsix/alpine-java")) ++ List(
     Cmd("ENV", "JAVA_MIN_MEM", "1024m"), 
     Cmd("RUN", "echo 8.8.8.8 foo >> /etc/hosts") 
    ) 
} 

残念ながら、動作するようには思えません。このイメージに基づいてコンテナを起動すると、/ etc/hostsには余分なエントリがありません。

私が代わりに次のことを試してみましたので、それが実際にファイルを書き込んだように見えます:

.... 
Cmd("RUN", "echo 8.8.8.8 foo >> /etc/hosts; ping -c 4 foo") 
.... 

そして、私は出力として、以下を取得しています:

[info] Step 9/15 : RUN echo 8.8.8.8 foo >> /etc/hosts; ping -c 4 foo 
[info] ---> Running in b6d7ba25f96f 
[info] PING foo (8.8.8.8): 56 data bytes 
[info] 64 bytes from 8.8.8.8: seq=0 ttl=37 time=5.521 ms 
[info] 64 bytes from 8.8.8.8: seq=1 ttl=37 time=3.188 ms 
[info] 64 bytes from 8.8.8.8: seq=2 ttl=37 time=6.012 ms 
[info] 64 bytes from 8.8.8.8: seq=3 ttl=37 time=4.192 ms 

変更のようなので、それは/に見えますetc/hostsがオーバーライドされています!

これを行う正しい方法は何ですか?

答えて

1

ファイル/etc/hostsはDockerによって管理され、画像を構築する際にカスタマイズすることはできません。

すでにわかっているように、RUN echo 8.8.8.8 foo > /etc/hosts; <some_command_requiring_custom_hosts_file>を使用してカスタムエントリを追加できます。しかし、この変更はこの特定のRUNコマンドの実行中にのみ利用可能です。

コンテナを実行するときにカスタムエントリが必要な場合は、パラメータをdocker rundocs参照)としてください。

通常、Dockerイメージに構成の詳細を含めないことがベストプラクティスです。コンテナーを実行しているときにのみ構成を適用すると、イメージを移植性のあるものに保つのに役立ちます。

1

はい、Dockerはそのファイルをオーバーライドします(実際には、コンテナの起動時にその場所にマウントされているファイルがホストシステムに存在しているため)、そこで行った変更はすべて上書きされます。

オプションは、アプリケーション起動スクリプトを指す代わりに、その変更を行うスクリプトをポイントしてから、アプリケーション起動スクリプトを実行するように、ドッカーのエントリポイントを変更することです。平野ドッキングウィンドウでそう

(申し訳ありませんが、私はSBTのドッキングウィンドウプラグインを使用したことがない)、代わりに(/usr/bin/myappを使用して)アプリの起動スクリプトにエントリを持つ:

ENTRYPOINT /usr/bin/myapp 

あなたは

RUN echo "echo 8.8.8.8 foo > /etc/hosts" >> /startup.sh 
RUN echo "/usr/bin/myapp" >> /startup.sh 
RUN chmod +x /startup.sh 
ENTRYPOINT /startup.sh 
を持っているでしょう
関連する問題