web-dev-qa-db-ja.com

Docker Swarmネットワークに対して1回限りのコマンドを実行すると、「ネットワークを手動で接続できません」

1.13の新しいdocker-composeファイルのサポートでデプロイされた新しいdocker swarmでデータベーススキーマを初期化するための1回限りのコマンドを実行しようとしています。

スウォームには次のネットワークがあります。

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
...
b7dptlu8zyqa        vme_internal         overlay             swarm
...

docker-compose.ymlファイルとして:

networks:
    internal:

私が実行するコマンドは

docker run --rm --network vme_internal app:0.1 db upgrade

余分なvme_接頭辞は、デプロイ時にスタックに付けた名前に由来します。上記のコマンドを実行すると、次のようになります。

docker: Error response from daemon: Could not attach to network vme_internal:
rpc error: code = 7 desc = network vme_internal not manually attachable.

ネットワークを接続可能にするにはどうすればよいですか?

Docker networking でattachableに関する特定の情報を見つけることができず、属性attachableをネットワーク定義に追加しようとしましたが、成功しませんでした。

19
sas

composerを使用する

composer v3.2 なので、composerファイルを使用して、キーワード attachable のように:

networks:
  mynet1:
    driver: overlay
    attachable: true

docker network createの使用

Docker Engine API v1.25以降、次のような --attachable パラメータを使用してネットワークを作成し、接続可能にすることができます。

docker network create --driver overlay --attachable my-overlay-network

すでに実行中のDockerサービスを更新するには:

  1. アタッチ可能なオーバーレイネットワークを作成します。

    docker network create --driver overlay --attachable my-attachable-overlay-network
    
  2. 「接続可能な」オーバーレイネットワークが無効になっているネットワークスタックを削除します(この例ではmy-non-attachable-overlay-network):

    docker service update --network-rm my-non-attachable-overlay-network myservice
    
  3. 「アタッチ可能な」オーバーレイネットワークが有効になっているネットワークスタックを追加します。

    docker service update --network-add my-attachable-overlay-network myservice
    
27
Murmel

デフォルトでは、新しいswarmモードで作成されたオーバーレイネットワークは、swarmから実行されていないコンテナーでは使用できません。バージョン1.13では、この設定を切り替えることができるため、必ずアップグレードしてください。接続可能フラグを使用してネットワークを作成する必要があります。また、これをSwarm Workerで機能させることもできませんでした。ノードをSwarm Managerに昇格させる必要がありました。

4
BMitch