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