如何与 Docker 容器建立 TCP 传出连接?
How to make a TCP outgoing connection with Docker container?
我的 Go 应用程序 TLS connections via tls.Dial()
交换数据。
主机 运行 时工作正常:
但是当应用程序是 运行 来自 Docker 容器时,传出连接似乎不起作用。该应用程序无限期挂起。
注 1:与使用 docker run -p $(docker-machine ip):2500:2500 ...
的行为相同
注意 2:除了 docker-机器的默认 VM 附带的默认设置外,VM 没有额外的端口转发设置。
Docker 使用 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 运行ning docker-machine.
问题
如何使 TCP 传出连接正常工作?
您正在使用 boot2docker 或 docker-machine(因为您在 OSX 上 运行 docker)。如果您使用的是 boot2docker,您必须转发 VirtualBox 上的端口以及 docker,看看这个博客 post:
https://fogstack.wordpress.com/2014/02/09/docker-on-osx-port-forwarding/
如果你使用的是 docker-machine,你必须连接到 docker-machine 分配的 ip,而不是本地主机,看看这个 post:
https://github.com/docker/machine/issues/710
我现在看到您正在使用 docker-machine,因此关于 docker-machine 的 post 应该可以回答您的问题。
编辑:我误解了这个问题。您正在尝试在转发端口上建立传出连接。那是不正确的。默认情况下 docker 可以在任何端口上建立传出连接。端口转发仅适用于传入连接。请在不指定要转发的任何端口的情况下重试。我怀疑您正试图在传入(转发)端口上建立传出连接。
我刚刚遇到了完全相同的问题。根本无法连接。
重新启动容器,突然传出连接正常。容器有可能在 docker?
的更新后幸存下来
当前使用 Docker 版本 18.09.3,内部版本 774a1f4
我的 Go 应用程序 TLS connections via tls.Dial()
交换数据。
主机 运行 时工作正常:
但是当应用程序是 运行 来自 Docker 容器时,传出连接似乎不起作用。该应用程序无限期挂起。
注 1:与使用 docker run -p $(docker-machine ip):2500:2500 ...
注意 2:除了 docker-机器的默认 VM 附带的默认设置外,VM 没有额外的端口转发设置。
Docker 使用 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 运行ning docker-machine.
问题
如何使 TCP 传出连接正常工作?
您正在使用 boot2docker 或 docker-machine(因为您在 OSX 上 运行 docker)。如果您使用的是 boot2docker,您必须转发 VirtualBox 上的端口以及 docker,看看这个博客 post: https://fogstack.wordpress.com/2014/02/09/docker-on-osx-port-forwarding/
如果你使用的是 docker-machine,你必须连接到 docker-machine 分配的 ip,而不是本地主机,看看这个 post: https://github.com/docker/machine/issues/710
我现在看到您正在使用 docker-machine,因此关于 docker-machine 的 post 应该可以回答您的问题。
编辑:我误解了这个问题。您正在尝试在转发端口上建立传出连接。那是不正确的。默认情况下 docker 可以在任何端口上建立传出连接。端口转发仅适用于传入连接。请在不指定要转发的任何端口的情况下重试。我怀疑您正试图在传入(转发)端口上建立传出连接。
我刚刚遇到了完全相同的问题。根本无法连接。
重新启动容器,突然传出连接正常。容器有可能在 docker?
的更新后幸存下来当前使用 Docker 版本 18.09.3,内部版本 774a1f4