J'essaie d'exécuter une commande unique pour initialiser un schéma de base de données dans un nouvel essaim de dockers qui est déployé avec la nouvelle prise en charge de 1.13 pour les fichiers de composition de dockers.
L'essaim a le réseau suivant:
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
...
b7dptlu8zyqa vme_internal overlay swarm
...
défini dans le docker-compose.yml
fichier en tant que:
networks:
internal:
La commande que j'exécute est
docker run --rm --network vme_internal app:0.1 db upgrade
avec le supplément vme_
préfixe provenant du nom que j'ai donné à la pile lors du déploiement. Maintenant, lorsque j'exécute la commande ci-dessus, j'obtiens:
docker: Error response from daemon: Could not attach to network vme_internal:
rpc error: code = 7 desc = network vme_internal not manually attachable.
Comment rendre le réseau connectable?
Je n'ai trouvé aucune information spécifique sur l'attachable dans Docker networking et j'ai essayé d'ajouter un attribut attachable
à la définition du réseau sans succès.
Utilisation du compositeur
Depuis composer v3.2 il est possible de configurer la propriété attachable via le fichier composer en utilisant le mot clé attachable
comme:
networks:
mynet1:
driver: overlay
attachable: true
Utilisation de docker network create
Depuis Docker Engine API v1.25, il est possible de créer un réseau et de le rendre attachable à l'aide de --attachable
paramètre comme:
docker network create --driver overlay --attachable my-overlay-network
Pour mettre à jour un service Docker déjà en cours d'exécution:
Créez un réseau de superposition amovible:
docker network create --driver overlay --attachable my-attachable-overlay-network
Supprimez la pile réseau avec un réseau de superposition "attachable" désactivé (dans cet exemple appelé: my-non-attachable-overlay-network
):
docker service update --network-rm my-non-attachable-overlay-network myservice
Ajoutez la pile réseau avec un réseau de superposition "attachable" activé:
docker service update --network-add my-attachable-overlay-network myservice
Par défaut, les réseaux de superposition créés avec le nouveau mode Swarm ne peuvent pas être utilisés avec des conteneurs non exécutés à partir de Swarm. La version 1.13 vous permet de basculer ce paramètre, alors assurez-vous que vous avez mis à niveau. Vous devez créer le réseau avec le drapeau attachable. Je ne pouvais pas non plus faire fonctionner cela sur un travailleur en essaim, le nœud devait être promu gestionnaire de l'essaim.