如何在不同的网络上连接不同的 docker 容器 运行

How to connect different docker containers running on different network

我的 docker-compose 文件中有两个服务。一个用于 Python django 应用程序,另一个用于 mysql 数据库。当我为两个容器使用相同的网络时,django 应用程序可以毫无错误地连接到数据库,但是每当我为它们使用不同的网络时,django 无法连接 mysql.

现在我的问题是 -

如何连接不同网络中的多个容器运行

Docker 撰写文件:

mysql_database:
    image: mysql_db:latest
    container_name: mysql_db
    command:
        mysqld --default-authentication-plugin=mysql_native_password      
    volumes:
        - "/mysql:/var/lib/mysql-files"
    ports:
        - "3306:3306"
    restart: always
    stdin_open: true
    tty: true
    environment:
        - MYSQL_HOST=localhost
        - MYSQL_PORT=3306
        - MYSQL_DATABASE=myDataBase
        - MYSQL_USER=myname
        - MYSQL_PASSWORD=somepassword
        - MYSQL_ROOT_PASSWORD=somepassword

    networks:
        mysql_network:
            ipv4_address: 172.16.0.18


django_app:
    image: backend_app:latest
    container_name: backend_app
    build:
        context: .
        dockerfile: Dockerfile
    tty: true
    ports:
        - "8000:8000"
    volumes:
        - ./my_backend_app:/code/
    networks:
        - backend_network
    depends_on:
        - mysql_database

    links:
        - mysql_database

    command: >
        bash -c "apt update
        && apt install python3-dev
        && source ./venv/bin/activate
        && python manage.py makemigrations
        && python manage.py migrate
        && python manage.py runserver 0.0.0.0:8000"


networks:
    backend_network:
        driver: bridge

    mysql_network:
        driver: bridge
        ipam:
            config:
                - subnet: 172.16.0.0/16


volumes:
    my_backend_app:

您可以向单个服务添加多个网络。在这种情况下,您需要将 mysql_network 添加到 django_app:

networks:
  - backend_network
  - mysql_network

有关此主题的更多详细信息,请参阅 docker-compose network documentation