web-dev-qa-db-ja.com

Dockerfileの/ etc / hostsにdocker RUN appendが機能しない

私は単純なDockerfileを持っていますが、最初のRUNコマンド(/ etc/hostsにホストIPアドレスを追加する)は効果がありません

FROM dockerfile/Java
RUN Sudo echo "XX.XX.XXX.XXX some.box.com MyFriendlyBoxName" >> /etc/hosts
ADD ./somejavaapp.jar /tmp/
#CMD Java -jar /tmp/somejavaapp.jar
EXPOSE 8280

私は使用して構築します

docker build .

次に、RUNエコーラインを使用して機能していることをテストします

Sudo docker run -t -i <built image ID> /bin/bash

次にコンテナに入りますが、/ etc/hostsファイルは追加されていません。同じエコーを実行すると、コンテナ内で目的の効果が得られます。

私のdockerfile RUNのどこが悪いのか誰かに教えてもらえますか?

19
Rob McFeely

Dockerは、新しいコンテナを作成するたびに動的に/etc/hostsを生成します。他をリンクできるように。 --add-Host オプションを使用できます。

docker run --add-Host www.domain.com:8.8.8.8 ubuntu ping www.domain.com
30
kev

Docker-composeを使用する場合は、 extra_hosts を使用します。

extra_hosts:
  - "somehost:162.242.195.82"
  - "otherhost:50.31.209.229"
0
andi

1つのIPに複数のドメイン名を追加したいという問題がありました。実際には、イメージを実行するたびに/ etc/hostsが上書きされるため、ビルド時に作成する方法はありません。したがって、docker-composeメソッドで--add-Hostオプションまたはそのextra_hostsエイリアンを利用することが唯一の方法のようです。しかし、実際のところ、単一の--add-Hostを使用して各ドメイン名を追加するのは、とても面倒でした。私は以下のものを試しましたが、うまくいきます:

docker run --add-Host "some.box.com MyFriendlyBoxName":X.X.X.X ubuntu cat /etc/hosts

実際には、それは--add-Hostの後の文字列をコロンにコピーして貼り付けるだけです。

0
epcpu

ホストマシンとコンテナの間でホストファイルエントリを維持しようとしている場合、別の方法として、ホストの/etc/hosts--add-Hostパラメータにマップするシェルスクリプトでコマンドをラップすることができます。

~/bin/Java

#!/bin/sh

ADD_HOSTS=$(tail -n +10 /etc/hosts | egrep -v '(^#|^$)' | sed -r 's/^([a-z0-9\.\:]+)\s+(.+)$/--add-Host="\2:\1"/g')

eval docker run \
    -it \
    --rm \
    $ADD_HOSTS \
    <image> \
    Java $*

return $?

明らかにJavaをあなたがやろうとしていることで置き換えてください...

説明; ADD_HOSTSは、ホストの/etc/hostsファイルの最初の10行以降すべてを取得します|コメントと空白行を削除します|エントリを--add-Host paramsに並べ替えます。

最初の10行の後ですべてを取得する理由は、ホストマシンのlocalhostおよびipv6エントリを除外するためです。必要に応じてこれを調整する必要がある場合があります。

0
kralos