22

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

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 ファイルが追加されていません。コンテナ内で同じ echo .... 行を実行すると、望ましい効果が得られます

私のdockerfile RUNの何が問題なのか誰か教えてもらえますか...?

4

4 に答える 4

38

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

docker run --add-host www.domain.com:8.8.8.8 ubuntu ping www.domain.com
于 2014-12-08T14:35:40.537 に答える
3

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

extra_hosts:
  - "somehost:162.242.195.82"
  - "otherhost:50.31.209.229"
于 2018-06-19T11:23:22.427 に答える
1

ホスト マシンとコンテナーの間でホスト ファイルのエントリを維持しようとしている場合、別の方法として、ホストをパラメーターにマップするシェル スクリプトでコマンドをラップすることができ/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-hostparams に並べ替えます。

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

于 2016-12-27T22:48:41.513 に答える