作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我经常看到将 docker 容器的端口暴露给主机的解决方案。
在我的情况下,我想将本地端口从一个容器转发到另一个容器。
假设我在 容器 A 上运行一个服务,该服务具有硬编码配置以访问 localhost 3306 上的 db。但我想在 container B 上运行 db 服务器。
端口转发从 A-localhost:3306 到 B-IP:3306 的最佳方式是什么?
最佳答案
在您的容器中安装 socat
并在启动时运行
socat TCP-LISTEN:3306,fork TCP:B-IP:3306 &
这将在您的 3306 上本地监听并将任何流量双向传递到 B-IP:3306
。 socat 在名为 socat 的包中可用。因此,您将运行以下任何命令来安装它
$ yum install -y socat
$ apt install -y socat
$ apk add socat
Edit-1
您甚至可以通过不触摸原始容器来做到这一点
Dockerfile
FROM alpine
RUN apk update && apk add socat
如下构建文件
docker build -t socat .
现在从同一个容器运行一个容器
docker run --name mysql-bridge-a-to-b --net=container:<containerAid> socat socat TCP-LISTEN:3306,fork TCP:BIP:3306
这将在 A 的网络上运行此容器。因此,当它在 A 的网络上监听时,即使 A 容器未被触及,localhost:3306
也会在 A 中可用。
关于docker - 如何将端口从一个 docker 容器转发到另一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46099874/
我是一名优秀的程序员,十分优秀!