猿问

如何与 Docker 容器建立 TCP 传出连接?

我的 Go 应用程序通过 TLS 连接tls.Dial()来交换数据。

从主机运行时它工作正常:

但是当应用程序从 Docker 容器运行时,传出连接似乎不起作用。该应用程序无限期挂起。

http://img2.mukewang.com/61c026060001e8f323440241.jpg

注 1:与使用相同的行为docker run -p $(docker-machine ip):2500:2500 ...


注 2:除了 docker-machine 的默认 VM 附带的默认设置之外,VM 没有额外的端口转发设置。


使用 Dockerfile 构建 Docker 镜像:


FROM golang:latest


RUN mkdir -p "$GOPATH/src/path/to/app"

# Install dependencies

RUN go get github.com/path/to/dep


VOLUME "$GOPATH/src/path/to/app"

EXPOSE 2500

WORKDIR "$GOPATH/src/path/to/app"

CMD ["go", "run", "main.go"]

主机运行OS X泊坞窗机。


问题

如何使 TCP 传出连接正常工作?


慕姐4208626
浏览 120回答 2
2回答

largeQ

您正在使用 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 可以在任何端口上进行传出连接。端口转发仅用于传入连接。请重试而不指定任何要转发的端口。我怀疑您正试图在传入(转发)端口上建立传出连接。

蛊毒传说

我刚刚遇到了完全相同的问题。根本无法连接。重新启动容器,突然传出连接工作正常。容器是否有可能在 docker 更新后幸存下来?当前使用 Docker 版本 18.09.3,构建 774a1f4
随时随地看视频慕课网APP

相关分类

Go
我要回答