一尘不染

如何将端口从一个Docker容器转发到另一个?

docker

我通常会看到将Docker容器的端口暴露给主机的解决方案。

就我而言,我想将本地端口从一个容器转发到另一个。假设我在具有 硬编码配置的 容器A 上运行服务, 以访问localhost
3306上的db
。但是我想在 容器B 上运行数据库服务器。

从A-localhost:3306到B-IP:3306的 端口转发的最佳方法是什么?


阅读 452

收藏
2020-06-17

共1个答案

一尘不染

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

编辑1

您甚至可以通过不触摸原始容器来执行此操作

Docker文件

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的网络上侦听时,localhost:3306即使A容器未被触摸,它也将在A中可用。

2020-06-17