如何将127.0.0.1流量从容器-A转发到另一个容器-B



我正在尝试将我公司的应用程序容器化。当我在VM中部署该应用程序时,我必须在同一VM中安装MySQL,因为该应用程序在源代码中有一个硬编码127.0.0.1:3306。现在我尝试将应用程序分为两个容器:应用程序容器和mysql容器。我已经将mysql容器端口3306发布到主机端口3306:

docker run --name mysql-container -p 3306:3306 -d mysql:latest

下一步是将应用程序容器127.0.0.1:3306转发到mysql容器端口3306。

我已经尝试过--network="host"让应用程序容器使用主机的网络,这样我就可以成功地从应用程序容器的127.0.0.1:3306连接mysql容器的端口3306。然而,由于某种原因,开发人员不喜欢它,所以我必须找到另一种方法来实现它。

我是Docker和container的新手,非常感谢您的帮助!

通常您应该创建一个网络-有两个选项,基本上是用户定义的网络和默认的网桥网络。

当你创建网络(这是docker中的一个抽象,比如你可以docker network ls来查看可用的网络(并在网络中运行你的两个容器时,它们会相互访问。

我已经找到了一个关于实现细节的好教程,它显示了这两种情况查看这里

话虽如此,当涉及到一起运行多个容器时,一个很好的选择,特别是在本地机器上开发的选择是";docker compose"-您声明应该运行哪些容器,当您docker-compose up时,它将用网络和所有东西启动它们,这样您就不需要深入研究如何正确配置docker容器的细节(要提供哪些标志等(。当然,从技术上讲,docker compose只是一种为您完成所有这些的脚本,但它确实是一个方便的工具,值得检查

Docker Compose是一个只需一个命令即可运行多容器应用程序的好工具,您需要创建一个文件docker-compose.yml并在那里定义您的应用程序,如下所示:

version: '1.0'
services:
database:
image: postgres
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=admin
- POSTGRES_DB=postgres
- PGDATA=/var/lib/postgresql/data/data/
ports:
- '5432:5432'
volumes: 
- ./db:/var/lib/postgresql/data
python-container:
build: .
environment:
- PP_PG_DB=postgres
- PP_PG_USER=postgres
- PP_PG_PASSWORD=admin
- PP_PG_HOST=database
- PP_PG_PORT=5432
depends_on:
- database
ports:
- 8000:8000
volumes: 
- ./uploads:/var/uploads

在这里,您可以看到我定义了两个服务,一个用于web应用程序,另一个用于数据库,每个服务都将在一个单独的容器中运行。我使用ports公开了数据库容器的端口5432,然后api服务器容器可以访问它。如果你是Docker的新手,你也需要注意volumes,卷是一种持久化数据库的方式,这样在重新启动容器时就不会丢失所有数据。

最新更新