[解決済み] Dockerコンテナ間で "ホスト名 "を介して通信する方法
2023-01-29 10:40:58
質問
モノリシックなサーバーを多くの小さな docker コンテナに分割する予定ですが、コンテナ間通信のための良いソリューションがまだ見つかっていません。これは私のターゲットシナリオです。
コンテナ同士をリンクさせる方法や、ポートを公開する方法は知っていますが、どの解決策も私には満足のいくものではありません。
従来のサーバネットワークのように、コンテナ間でホスト名(コンテナ名)を介して通信するソリューションはないのでしょうか?
どのように解決するのですか?
編集:Docker1.9以降では
docker network
コマンドを利用できるようになりました(
https://stackoverflow.com/a/35184695/977939
) を使用することをお勧めします。
私の解決策は、DNS レコードが自動的に更新されるようにホスト上で dnsmasq をセットアップすることです: "A" レコードはコンテナーの名前を持ち、コンテナーの IP アドレスを自動的に (10 秒ごとに) 指します。そのため 自動更新スクリプト をここに貼り付けます。
#!/bin/bash
# 10 seconds interval time by default
INTERVAL=${INTERVAL:-10}
# dnsmasq config directory
DNSMASQ_CONFIG=${DNSMASQ_CONFIG:-.}
# commands used in this script
DOCKER=${DOCKER:-docker}
SLEEP=${SLEEP:-sleep}
TAIL=${TAIL:-tail}
declare -A service_map
while true
do
changed=false
while read line
do
name=${line##* }
ip=$(${DOCKER} inspect --format '{{.NetworkSettings.IPAddress}}' $name)
if [ -z ${service_map[$name]} ] || [ ${service_map[$name]} != $ip ] # IP addr changed
then
service_map[$name]=$ip
# write to file
echo $name has a new IP Address $ip >&2
echo "host-record=$name,$ip" > "${DNSMASQ_CONFIG}/docker-$name"
changed=true
fi
done < <(${DOCKER} ps | ${TAIL} -n +2)
# a change of IP address occured, restart dnsmasq
if [ $changed = true ]
then
systemctl restart dnsmasq
fi
${SLEEP} $INTERVAL
done
dnsmasq サービスが
docker0
. そして、コンテナを
--dns HOST_ADDRESS
でコンテナを起動し、このミニDNSサービスを使用します。
関連
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] ホストからDockerコンテナにファイルをコピーする方法は?
-
[解決済み] リポジトリを使用せずに、あるホストから別のホストにDockerイメージをコピーする方法
-
[解決済み] ホストからDockerコンテナのIPアドレスを取得する方法
-
[解決済み] Dockerコンテナのシェルに入るにはどうしたらいいですか?
-
[解決済み] 古いDockerコンテナを削除する方法
-
[解決済み] Dockerコンテナに環境変数を渡すにはどうしたらいいですか?
-
[解決済み] Dockerでコンテナを一覧表示する方法
-
[解決済み】Dockerは仮想マシンとどう違うの?
-
[解決済み】Dockerイメージとコンテナの違いは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] オクテット・ストリングス それは何ですか?
-
[解決済み] SNMPのpingとは何ですか?
-
[解決済み] カーネルソースプロジェクトのinclude/uapiに含まれるもの
-
[解決済み] TCPのフロー制御と輻輳制御の違いは何ですか?
-
[解決済み】ローカルネットワーク内のすべての有効なIPアドレスのリストを取得する方法は?[クローズド]
-
[解決済み】インターネット上で最大の安全なUDPパケットサイズとは?
-
[解決済み】UDP vs TCP、どれくらい速いのか?[クローズド]
-
[解決済み] 未知の拡張子を含むIPv6拡張ヘッダのパース
-
[解決済み] ビデオストリームにおけるTCPとUDPの比較
-
[解決済み] Twistedのselect/pollリアクターとepollリアクターの注意点