我的 Go 应用程序通过 TLS 连接tls.Dial()来交换数据。从主机运行时它工作正常:但是当应用程序从 Docker 容器运行时,传出连接似乎不起作用。该应用程序无限期挂起。注 1:与使用相同的行为docker run -p $(docker-machine ip):2500:2500 ...注 2:除了 docker-machine 的默认 VM 附带的默认设置之外,VM 没有额外的端口转发设置。使用 Dockerfile 构建 Docker 镜像:FROM golang:latestRUN mkdir -p "$GOPATH/src/path/to/app"# Install dependenciesRUN go get github.com/path/to/depVOLUME "$GOPATH/src/path/to/app"EXPOSE 2500WORKDIR "$GOPATH/src/path/to/app"CMD ["go", "run", "main.go"]主机运行OS X泊坞窗机。问题如何使 TCP 传出连接正常工作?
2 回答
largeQ
TA贡献2039条经验 获得超7个赞
您正在使用 boot2docker 或 docker-machine(因为您在 OSX 上运行 docker)。如果您使用的是 boot2docker,则必须在 VirtualBox 和 docker 上转发端口,请查看此博客文章:https : //fogstack.wordpress.com/2014/02/09/docker-on-osx-port -转发/
如果你使用的是docker-machine,你必须连接到docker-machine分配的ip,而不是localhost,看看这个帖子:https : //github.com/docker/machine/issues/710
我现在看到您正在专门使用 docker-machine,所以关于 docker-machine 的帖子应该可以回答您的问题。
编辑:我误解了这个问题。您正在尝试在转发端口上建立传出连接。那是不正确的。默认情况下,docker 可以在任何端口上进行传出连接。端口转发仅用于传入连接。请重试而不指定任何要转发的端口。我怀疑您正试图在传入(转发)端口上建立传出连接。
蛊毒传说
TA贡献1895条经验 获得超3个赞
我刚刚遇到了完全相同的问题。根本无法连接。
重新启动容器,突然传出连接工作正常。容器是否有可能在 docker 更新后幸存下来?
当前使用 Docker 版本 18.09.3,构建 774a1f4
- 2 回答
- 0 关注
- 118 浏览
添加回答
举报
0/150
提交
取消