[解決済み] Dockerfileで-hオプションのように特定のホスト名を扱う方法
質問
CentOS 7をDockerデーモンホストとして、centos:6のDockerイメージを使用しています。
私は、ループバック以外のアドレスとして解決可能なホスト名を必要とするいくつかのソフトウェアをインストールしたいです。もし、Dockerイメージを-hオプション付きで実行すると、以下のようになります。
docker run -i -t -h myhost centos:6 /bin/bash
すると、コンテナ内の/etc/hostsが自動的に以下のように構成されるので、インストールすることができます。
[root@myhost /]# cat /etc/hosts
172.17.0.7 myhost
127.0.0.1 localhost
[root@myhost /]# ping myhost
PING myhost (172.17.0.7) 56(84) bytes of data.
64 bytes from myhost (172.17.0.7): icmp_seq=1 ttl=64 time=0.033 ms
しかし、Dockerfileからイメージを作成する場合、同じ方法は使えません。そこで、以下のDockerfileを使用してイメージを作成することを試してみました。
FROM centos:6
ENV HOSTNAME myhost
RUN ping myhost
dockerのビルド処理で、以下のように割り当てられたホスト名が動的IPアドレスとして解決されないことがあります。
$ docker build -t testimage .
Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon
Step 0 : FROM centos:6
---> a30bc9f3097e
Step 1 : ENV HOSTNAME myhost
---> Using cache
---> e73bf592389e
Step 2 : RUN ping myhost
---> Running in ca54c8eac073
ping: unknown host myhost
INFO[0000] The command [/bin/sh -c ping myhost] returned a non-zero code: 2
動的コンテナIPアドレスとして解決された特定のホスト名を使用するにはどうすればよいですか?
解決方法は?
これはDockerfileでは一般的に不可能です。
ソフトウェアによっては、何らかの回避策を講じることができるかもしれません。例えば、次のようなことを試してみてください。
RUN echo $(grep $(hostname) /etc/hosts | cut -f1) my.host.name >> /etc/hosts && install-software
ソフトウェアのインストールと同じRUNコマンドでホスト名を設定することで、コンテナの同じレイヤーの中で行われることになります。Dockerは後でホスト名を上書きするので、実行時に新たに設定する必要がありますが、あなたのソフトウェアはそれで問題ないかもしれません。
もし、このようなことをたくさんしなければならない場合は、次のことを試してみてください。 パッカー コンテナ構築用。Dockerコンテナを構築することができますが、複数のレイヤーを使用することはありません。これにより、再構築は遅くなり、ビルドされたイメージのダウンロードは速くなり、コンテナにフリーズする前にイメージに対して複数の操作を行うことができるようになり、より便利になりました。
関連
-
[解決済み】Dockerのビルドコンテキスト外のファイルをインクルードする方法とは?
-
[解決済み】D-Bus接続の取得に失敗しました。操作が許可されていません
-
[解決済み] docker cp が実行中のインスタンスで "No such container:path" を投げる [閉じた] 。
-
[解決済み] Dockerの初期化に失敗しました
-
[解決済み] docker-proxy - 443 でバインドしようとすると、ユーザーランドプロキシーを開始する際にエラーが発生します。
-
企業向けWeChatアラート監視のためのPrometheus+Grafana+AlertmanagerのDockerインストール
-
[解決済み] Dockerfileにコメントを入れるにはどうしたらいいですか?
-
[解決済み】Dockerfileにイメージ名を設定する方法は?
-
[解決済み] ホストからDockerコンテナ内のmysqlに接続する
-
[解決済み] Docker CMDを複数回使用して、複数のサービスを実行することができないのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Docker Error: そのようなコンテナはありません: friendlyhello
-
[解決済み] Docker Unknown フラグ --mount
-
[解決済み] Dockerfileで-hオプションのように特定のホスト名を扱う方法
-
[解決済み] docker の多段ビルド Go イメージ - x509: 証明書は不明な機関によって署名されました。
-
[解決済み] 作成前のチェックでエラーになる。「このコンピュータでは、VT-X/AMD-vが有効になっていません。有効になっているのに「BIOSで有効にすることが必須です。
-
docker encountered problem 4: yaml: line 1: mapping values are not allowed in this context.
-
minttyを使用している場合は、プレフィックスを付けてみてください。
-
docker: デーモンからのエラー応答。コンテナ名 "/mysql" は既にコンテナによって使用されています。
-
rancher のデプロイメントに最小限の可用性の問題はありません。
-
Docker mount host directory Docker access Permission denied 解決策