如何在不同的网络上连接不同的 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
我的 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