Как подключить разные контейнеры докеров, работающие в разных сетях

У меня есть две службы в моем файле docker-compose. Один для приложения Python django, а другой для базы данных mysql. Когда я использую одну и ту же сеть для обоих контейнеров, приложение django может подключаться к базе данных без каких-либо ошибок, но всякий раз, когда я использую для них разные сети, django не может подключиться к mysql.

Теперь мой вопрос -

Как соединить несколько контейнеров, работающих в разных сетях

Файл Docker Compose:

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:

person Shamim    schedule 25.09.2019    source источник
comment
Возможный дубликат: Как подключить контейнеры в разных сетях в Docker Compose?   -  person BMitch    schedule 25.09.2019


Ответы (1)


Вы можете добавить несколько сетей к одному сервису. В этом случае вам нужно добавить mysql_network в django_app:

networks:
  - backend_network
  - mysql_network

Дополнительную информацию по этой теме см. в документации по сети docker-compose.

person Blokje5    schedule 25.09.2019
comment
Можно ли подключить их по IP-адресу без совместного использования сети? - person Shamim; 25.09.2019
comment
Вы почти никогда напрямую не используете внутренние IP-адреса Docker для чего-либо. Я считаю, что они должны быть в одной сети для подключения в любом случае, независимо от того, знаете ли вы адрес. - person David Maze; 25.09.2019
comment
@ Шамим, есть ли особая причина, по которой ты не хочешь делиться сетью? - person Blokje5; 25.09.2019
comment
Я поделился сетью mysql. Теперь это работает. Благодарю вас ! - person Shamim; 25.09.2019