【问题标题】:How to connect different docker containers running on different network如何连接在不同网络上运行的不同 docker 容器
【发布时间】:2019-09-25 10:34:41
【问题描述】:

我的 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:

【问题讨论】:

标签: docker docker-compose docker-networking docker-network


【解决方案1】:

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

networks:
  - backend_network
  - mysql_network

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

【讨论】:

  • 不共享网络是否可以通过ip地址连接?
  • 您几乎从不直接将 Docker 内部 IP 地址用于任何事情。我相信他们需要在同一个网络上才能连接,不管你是否知道地址。
  • @Shamim 是否有您不想共享网络的特殊原因?
  • 我已经共享了mysql网络。现在它正在工作。谢谢!
猜你喜欢
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多