2つの異なるフォルダに2つの別々のdocker-compose.yml
ファイルがあります。
front
のコンテナーがapi
のコンテナーにリクエストを送信できることを確認するにはどうすればよいですか?
特定のIPアドレスをこのコンテナーに割り当てることができるように、--default-gateway
オプションを個々のコンテナーにdocker run
を使用して設定できることはわかっていますが、docker-compose
を使用する場合はこのオプションは使用できないようです。
現在私は最終的にdocker inspect my_api_container_id
をやって出力のゲートウェイを見ています。それはうまくいきますが、問題はこのIPがランダムに割り当てられているということです、それで私はそれに頼ることができません。
そのため、この質問の別の形式は、
しかし、最終的に私が見ているのは以下のとおりです。
あなたはあなたがお互いに話し合いたいコンテナが同じネットワーク上にあることを確認する必要があります。ネットワークは一流のdocker構文であり、構成するためのものではありません。
# front/docker-compose.yml
version: '2'
services:
front:
...
networks:
- some-net
networks:
some-net:
driver: bridge
...
# api/docker-compose.yml
version: '2'
services:
api:
...
networks:
- front_some-net
networks:
front_some-net:
external: true
注:アプリのネットワークには「プロジェクト名」に基づいた名前が付けられます。これは、それが存在するディレクトリの名前に基づいています。この場合、プレフィックス
front_
が追加されました
それから彼らはサービス名を使用して互いに話すことができます。 front
からping api
をすることができ、その逆も可能です。
@ johnharris85のすばらしい答えにちょっとだけ触れて、docker composeファイルを実行しているときには "default
"ネットワークが作成されるので、それを外部ネットワークとして他のcomposeファイルに追加することができます。
# front/docker-compose.yml
version: '2'
services:
front_service:
...
...
# api/docker-compose.yml
version: '2'
services:
api_service:
...
networks:
- front_default
networks:
front_default:
external: true
私にとって最初のdocker-composeファイルを所有しておらず、それと通信したいので、このアプローチがより適していました。
アップデート:作成ファイルバージョン3.5現在:
これは今動作します:
version: "3.5"
services:
proxy:
image: hello-world
ports:
- "80:80"
networks:
- proxynet
networks:
proxynet:
name: custom_network
docker-compose up -d
は、 'custom_network'というネットワークに参加します。存在しない場合は作成されます。
root@ubuntu-s-1vcpu-1gb-tor1-01:~# docker-compose up -d
Creating network "custom_network" with the default driver
Creating root_proxy_1 ... done
今、あなたはこれを行うことができます:
version: "2"
services:
web:
image: hello-world
networks:
- my-proxy-net
networks:
my-proxy-net:
external:
name: custom_network
これにより、外部ネットワーク上にあるコンテナが作成されます。
私はまだドキュメントに参考文献を見つけることができませんが、それはうまくいきます!
api
のすべてのコンテナは、次の設定でfront
デフォルトネットワークに参加できます。
# api/docker-compose.yml
...
networks:
default:
external:
name: front_default
Docker compose guideを参照してください。 既存のネットワークを使用する (下部を参照)
これまでの投稿情報は正しいですが、コンテナをリンクする方法についての詳細はありません。「external_links」として接続する必要があります。
この例があなたにもっと明確になることを願っています:
2つのサービス(svc11とsvc12)を持つapp1/docker-compose.ymlと、さらに2つのサービス(svc21とsvc22)を持つapp2/docker-compose.ymlがあり、交差して接続する必要があるとします。
svc11はsvc22のコンテナに接続する必要があります
そのため、設定は次のようになります。
これはapp1/docker-compose.ymlです:
version: '2'
services:
svc11:
container_name: container11
[..]
networks:
- default # this network
- app2_default # external network
external_links:
- container22:container22
[..]
svc12:
container_name: container12
[..]
networks:
default: # this network (app1)
driver: bridge
app2_default: # external network (app2)
external: true
これはapp2/docker-compose.ymlです:
version: '2'
services:
svc21:
container_name: container21
[..]
networks:
- default # this network (app2)
- app1_default # external network (app1)
external_links:
- container11:container11
[..]
svc22:
container_name: container22
[..]
networks:
default: # this network (app2)
driver: bridge
app1_default: # external network (app1)
external: true
Compose 1.18(spec 3.5)以降、必要なすべてのCompose YAMLファイルに独自のカスタム名を使用してデフォルトネットワークを上書きすることができます。それはそれらに以下を追加するのと同じくらい簡単です:
networks:
default:
name: my-app
上記は
version
が3.5
に設定されていることを前提としています(4+で廃止予定でない場合は上記を参照)。
他の答えも同じことを示しています。これは簡単な要約です。
次を使用して、それらを同時に構成することにより、すべてのコンテナが同じネットワークにdocker-compose
'されるようにします。
docker compose --file ~/front/docker-compose.yml --file ~/api/docker-compose.yml up -d
別のdocker-composeネットワークを使用するには、これらを行うだけです(docker-compose間でネットワークを共有するため):
up -d
で最初のdocker-composeプロジェクトを実行します- 最初のdocker-composeのネットワーク名を検索するには、
docker network ls
(ルートディレクトリプロジェクトの名前が含まれます)- 次に、2番目のdocker-composeファイルで、この構造でその名前を使用します。
2番目のdocker-compose.yml
version: '3'
services:
service-on-second-compose: # Define any names that you want.
.
.
.
networks:
- <put it here(the network name that comes from "docker network ls")>
networks:
- <put it here(the network name that comes from "docker network ls")>:
external: true
version: '2'
services:
bot:
build: .
volumes:
- '.:/home/node'
- /home/node/node_modules
networks:
- my-rede
mem_limit: 100m
memswap_limit: 100m
cpu_quota: 25000
container_name: 236948199393329152_585042339404185600_bot
command: node index.js
environment:
NODE_ENV: production
networks:
my-rede:
external:
name: name_rede_externa