web-dev-qa-db-ja.com

dockerdeployはswarmでポートを公開しません

2つのノード、1つのマネージャーと1つのワーカーで設定された群れがあります。アプリケーションにアクセスできるように、スウォームにポートを公開したいのですが、どうすればこれを実現できるのでしょうか。

version: '2'
services:
  server:
    build: .
    image: my-hub.company.com/application/server:latest
    ports:
      - "80:80"

これにより、docker-compose upを実行するとポート80が公開され、問題なく動作しますが、バンドルされたデプロイを実行すると

docker deploy my-service

これはポートを公開しないため、ポートを指す代わりに、dockerpsで80/tcpと表示されます。おそらくこれは、ロードバランサーを接続するか、いくつかの凝ったコマンドを実行するか、マルチホストスウォームでこのポートを実際に公開するために構成の別のレイヤーを追加する必要があるためです。

誰かが私がこれをポートを公開するために構成/実行する必要があることを理解するのを手伝ってくれますか?.

私の最良のシナリオは、ポート80が公開されており、異なるホスト名からアクセスすると、異なるアプリケーションに送信されることです。

更新:アプリケーションをデプロイした後に次のコマンドを実行すると機能するようです

docker service update -p 80:80 my-service_server
docker kill <my-service_server id>

HAプロキシを実行するためのこのリポジトリを見つけました。これは素晴らしいようで、docker自体によってサポートされていますが、新しいスウォームモードを使用してこれをサービスに個別に適用することはできないようです。

https://github.com/docker/dockercloud-haproxy

ネットワークがどのように見えるべきかを説明する素晴らしい説明が下部にあります:

Internet -> HAProxy -> Service_A -> Container A

ただし、docker service createコマンドを使用してサービスをリンクする方法が見つかりません。最適には、ネットワークをセットアップする方法のように見えます。このネットワークをサービスに適用すると、HAProxyで取得されます。

-マーカス

11
Oldek

スウォームモードは、別の方法でポートを公開します。ホスト上のポートを公開していないため、docker psには表示されません。ポートをすべてのノードに公開して、サービスレプリカ間の負荷分散を可能にします。

docker service inspect my-serviceからポートが表示されます。

他のサービスはmy-service:80に接続できる必要があります

9
dnephin

私が今のところ理解している限り、作成後にサービスを更新するポートを公開すると、次のようになります。

docker service update my-service --publish-add 80:80
15
sebbalex

docker service lsはポートマッピングを表示します。

1
Florian Klein