码头工人从局域网访问容器

时间:2018-07-30 01:54:46

标签: docker networking portforwarding

我有一个程序在docker容器中运行,并且暴露了端口8888。但是,当我尝试从设备(与主机位于同一LAN,而不与主机位于同一局域网)连接该程序时,失败了。 这是我的docker文件

  

从golang:1.10.1

     

......

     

运行go build -buildmode = plugin -o plugin.so plugin.go

     

博览会8666:8888

然后我用

启动容器
  

docker run -it -P --network host plugin:v0.3 bash

并运行

  

运行program.go

以bash开头。 它说

  

2018/07/30 01:51:43监听端口8888

但是我无法从其他设备(与主机位于同一局域网但与主机不在同一局域网中)连接到端口

然后我尝试了

  

docker ps -a

ports列为空(通常应该有一个映射?)

enter image description here

2 个答案:

答案 0 :(得分:1)

Expose不会为您创建端口映射,它们只是“从设计者到用户的注释”。将-p 8666:8888添加到Docker运行命令行中。

答案 1 :(得分:0)

我已通过替换

解决了问题
  

运行program.go

之后

  

docker run -it -P --network host plugin:v0.3 bash

使用

  

docker run -p 8666:8888 plugin:v0.5 go run program.go

就像魔术一样,我仍然不知道为什么,但是它可以工作。(好像docker仅在容器启动时才进行端口转发)

稍后我将对其进行深入研究。