
私は docker swarm 構成を持っており、そこに 2 つのスタック (main
およびmon
) を展開しました。1 つのスタックでポートを公開し、別のスタックからそれを参照することができます。ただし、私はそれを行わず、代わりに 127.0.0.11 DNS を使用してアクセスする方法を見つけようとしていました。
私はmon
というサービスを持っていますgrafana
使用https://docs.docker.com/docker-cloud/apps/service-links/#別のスタック上のサービスまたはコンテナの検出スタック名を使用して参照できることを示していましたが、試してみると機能せping grafana.mon
ず、無効なホスト名が返されました。
答え1
これを行うには、同じネットワークを使用するようにするだけで、それらは表示されます。私の場合はpublic
、すべてのスタックによって外部から参照される というネットワークを定義しました。
docker network create -d overlay --attachable public
そこからdocker-compose.ymlファイルで
networks:
public:
external:
name: public
アクセスするには、サービス名を使用するだけです。
答え2
両方のスタックがオーバーレイ ネットワーク タイプを介して接続できるようにし、両方のスタックの外部に作成されたオーバーレイ ネットワークを両方のスタックが (少なくとも必要なサービス上で) 使用できるようにする必要があります。
スタックが起動する前にオーバーレイ ネットワークを作成する必要があります。そうすることで、接続する必要があるサービスがそれに「接続」できるようになります。
このようにネットワークを作成します
docker network create --driver overlay --attachable
次に、envファイルでサービス名を参照し、サービスがどのような名前で呼び出されているかを確認します。
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
vkz5vccbmce7 foo-stack_por-service replicated 1/1 por-service:1.0.0 *:33065->3306/tcp
sjpnrkm1iiha foo-stack_vic-service replicated 1/1 vic-service:1.0.0 *:8081->80/tcp
0capavl31oab bar-stack_tar-service replicated 1/1 tar-service:1.0.0 *:33066->3306/tcp
9vohh24jt6hy bar-stack_zen-service replicated 1/1 zen-service:1.0.0 *:8082->80/tcp
次に、NAME 列からサービスの名前を取得します。例:バースタック tar サービス
デプロイ時に指定したスタック名がサービスにプレフィックスとして付けられることに注意してください。
docker stack ls
NAME SERVICES ORCHESTRATOR
foo-stack 2 Swarm
bar-stack 2 Swarm