docker - 从 docker 容器内进行端口转发

标签 docker portforwarding

我正在尝试构建一个具有转发端口的容器,以便在容器中运行的代码可以访问远程数据库。 所以我把这条线

CMD ssh -L 27017:localhost:27017

在我的 dockerfile 中,然后运行它,但在任何情况下我都看不到转发的端口(我尝试使用 RUN 而不是 cmd,并尝试交互运行容器或使用 -d ,但在前一种情况下我没有转发,在后一种情况下,容器在启动后很快就会退出,即使将 &&/bin/bash 添加到 ssh 命令的末尾也是如此。 我成功做到这一点的唯一方法是进行交互式运行

$docker run -it --name cont_name im_name /bin/bash

然后从交互式 shell 执行端口转发所需的 ssh(现在绑定(bind)了 shell)。然后,从本地主机上的另一个窗口,我使用“进入”第一个容器

$ docker exec -it cont_name bash 

我现在确实看到端口转发了。有没有更好/自动的方法来做到这一点? “screen”在容器中运行似乎很麻烦。

最佳答案

我认为你想要做的是将端口从容器“绑定(bind)”到主机。您需要知道的第一件事是端口是否已通过 EXPOSE 暴露在您计划使用的 docker 容器中。接下来的事情是将其添加到 docker run... :

-p 127.0.0.1:3360:3306

假设您正在使用一个 mysql 实例,公开的端口是 3306,因此您可以将其绑定(bind)到同一端口上的主机或主机上您喜欢的任何端口。

关于docker - 从 docker 容器内进行端口转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32070789/

相关文章:

ubuntu - 如何使用 docker 创建运行 docker 的最小实时 ISO?

docker - 如果在持续集成中使用Docker,如何使Docker不占用磁盘空间

docker - `docker serve`命令是什么

ubuntu - Redis不在后台运行

mysql - 使用 HAproxy 拆分 mysql 集群的读/写

docker - Nexus 3 Docker容器和备份

Docker 容器无法解析 DNS 以到达另一台 AWS Ec2 机器

kubernetes - 通过 pod 进行隧道传输

java - 使用 JSch 通过 Jumphost 连接到远程主机时为 "reject HostKey"

docker容器内端口转发