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
をネットワーク定義に追加しようとしましたが、成功しませんでした。
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サービスを更新するには:
アタッチ可能なオーバーレイネットワークを作成します。
docker network create --driver overlay --attachable my-attachable-overlay-network
「接続可能な」オーバーレイネットワークが無効になっているネットワークスタックを削除します(この例ではmy-non-attachable-overlay-network
):
docker service update --network-rm my-non-attachable-overlay-network myservice
「アタッチ可能な」オーバーレイネットワークが有効になっているネットワークスタックを追加します。
docker service update --network-add my-attachable-overlay-network myservice
デフォルトでは、新しいswarmモードで作成されたオーバーレイネットワークは、swarmから実行されていないコンテナーでは使用できません。バージョン1.13では、この設定を切り替えることができるため、必ずアップグレードしてください。接続可能フラグを使用してネットワークを作成する必要があります。また、これをSwarm Workerで機能させることもできませんでした。ノードをSwarm Managerに昇格させる必要がありました。