我有一个程序在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列为空(通常应该有一个映射?)
答案 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仅在容器启动时才进行端口转发)
稍后我将对其进行深入研究。