次のdocker-compose.yml
を検討してください
version: '2'
services:
serv1:
build: .
ports:
- "8080:8080"
links:
- serv2
serv2:
image: redis
ports:
- "6379:6379"
サービスを管理するためにポートをホストに転送していますが、デフォルトのDockerネットワークを使用するだけでサービスが相互にアクセスできます。たとえば、serv1
で実行されているプログラムはredis:6379
にアクセスでき、DNSの魔法がそれを機能させます。ホスト名:ポートでコンテナのポートにアクセスできるように、このネットワークにホストを追加したいと思います。
これは、アプリケーションと同じネットワーク上にあるコンテナーでdnsプロキシ(dnsmasqなど)を実行することで実現できます。次に、ホストDNSをコンテナIPに向けると、ネットワーク上のコンテナにいるかのようにホスト名を解決できるようになります。
私はあなたを正しく理解しているかどうかわかりません。あなたは例えば欲しい同じネットワーク内にあるコンテナからだけでなく、ホストIPアドレスを使用してコンテナの外部からもredisサーバーにアクセスできますか?
これを実現するには、ここで説明するようにexposeコマンドを使用する必要があります https://docs.docker.com/compose/compose-file /#/ expose
expose:
- "6379"
そう
ports:
- "6379:6379"
expose:
- "6379"
トリックを行う必要があります。
EXPOSE命令は、コンテナーが実行時に指定されたネットワークポートでリッスンすることをDockerに通知します。 EXPOSEは、コンテナのポートにホストがアクセスできるようにしません。これを行うには、-pフラグを使用してポートの範囲を公開するか、-Pフラグを使用して公開されているすべてのポートを公開する必要があります。 1つのポート番号を公開し、別の番号で外部に公開できます。
ホストマシンのhostsファイルを変更して、コンテナエントリを追加するだけです。 例: 127.0.0.1 container1 127.0.0.1 container2 127.0.0.1 container3
コンテナにアクセスするための簡単な回避策が必要な場合:
$ docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
172.19.0.9
/etc/hosts
に追加します。# /etc/hosts
172.19.0.9 container_name