我的Go应用程序使TLS connections via tls.Dial()
交换数据。
从主机运行时它可以正常工作:
但是当从Docker容器运行应用程序时,传出连接似乎不起作用。该应用程序无限期挂起。
注释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运行 docker-machine 。
如何使TCP传出连接起作用?
答案 0 :(得分:4)
您正在使用boot2docker或docker-machine(因为您在OSX上运行docker)。如果你使用boot2docker,你必须转发VirtualBox和docker上的端口,看一下这篇博文: https://fogstack.wordpress.com/2014/02/09/docker-on-osx-port-forwarding/
如果你使用的是docker-machine,你必须连接到docker-machine分配的ip,而不是localhost,看看这篇帖子: https://github.com/docker/machine/issues/710
我现在看到你正在使用docker-machine,所以关于docker-machine的帖子应该回答你的问题。
编辑:我误解了这个问题。您正尝试在转发的端口上建立传出连接。这是不正确的。默认情况下,docker可以在任何端口上建立传出连接。端口转发仅用于传入连接。请重新尝试,不要指定任何要转发的端口。我怀疑你是在尝试在传入(转发)端口上建立传出连接。答案 1 :(得分:1)
我遇到了完全相同的问题。根本无法连接。
重新启动容器,突然外向连接工作正常。容器是否有可能在docker更新中幸免于难?
当前使用Docker 18.09.3版,内部版本774a1f4