简体   繁体   中英

Error when using Docker stack deploy -c docker-compose.yaml mynetwork

Project structure
在此处输入图像描述

Here is my.yaml

version: "3.3"
services:
  database:
    image: mysql:8
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_USER: ${mysql_user}
      MYSQL_PASSWORD: ${mysql_password}
      MYSQL_ROOT_PASSWORD: ${mysql_root_password}
    ports:
      - "6033:3306"
    networks:
      - ${network_name}
    volumes:
      - dbdata:/var/lib/mysql
      - "./.scripts/schema.sql:/docker-entrypoint-initdb.d/1.sql"
      - "./.scripts/data.sql:/docker-entrypoint-initdb.d/2.sql"
    secrets:
      - mysql_user
      - mysql_password
      - mysql_root_password
      - container_name
      - network_name

secrets:
  mysql_user:
    file: /run/secrets/mysql_user
  mysql_password:
    file: /run/secrets/mysql_password
  mysql_root_password:
    file: /run/secrets/mysql_root_password
  network_name:
    file: /run/secrets/network_name

networks:
  ${network_name}:
    driver: bridge

Here is my script

#!/bin/bash

# Leave current swarm
docker swarm leave --force

# Initialize the host as a Swarm manager
docker swarm init

# Create the secrets
echo "server_user" | docker secret create mysql_user -
echo "server_password" | docker secret create mysql_password -
echo "a1128f69-e6f7-4e93-a2df-3d4db6030abc" | docker secret create mysql_root_password -
echo "template_network" | docker secret create network_name -

# Deploy the stack using the secrets
docker stack deploy -c docker-compose.yaml mynetwork

Here is the error

Node left the swarm.
Swarm initialized: current node (y46rjvlu57bibyhgwk7nthykw) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-161prfq442ha035laq1plnv1o2qfqs026dmg6aslpd4kao7o0i-bnwc5zxiwt3ctmfbxfoszbick 192.168.65.3:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

l3nrkqhy7ygtrb05x7c5rvavu
xrhp70n50waaas1hqha8fk2j2
wj1y8runsi8vydpzc09hp9bmp
u5b6suutp7tkt4lqd5i90bgif
Creating network mynetwork_
failed to create network mynetwork_: Error response from daemon: rpc error: code = InvalidArgument desc = name must be valid as a DNS name component

I do not get the error when I don't use docker secrets for the variables, so I'm wondering if that is something to do with it.

I have tried restarting / clearing / destroying all the containers /.networks / services / images in Docker too.

Any help or tips for improvement are also welcomed.

Delete the two networks: blocks.

The actual problem here is the top-level networks: . This is outside the context of any particular service, so where you're getting a network_name secret within the database service, that doesn't happen at the top level. That means Compose tries to expand the environment variable network_name as the.network name, but it's empty.

(In Swarm mode you may not want bridge .networking either.)

If you remove the networks: blocks then Compose will create a.network named default and attach the container(s) to it. If you do need some non-standard settings then it's possible to configure the default .network, but keeping the default name and still attaching containers to it by default. More details are in Networking in Compose in the Docker documentation.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM