如何使用Docker容器建立TCP传出连接?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Docker容器建立TCP传出连接?相关的知识,希望对你有一定的参考价值。
我的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传出连接起作用?
您正在使用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可以在任何端口上建立传出连接。端口转发仅用于传入连接。请重新尝试,不要指定任何要转发的端口。我怀疑你是在尝试在传入(转发)端口上建立传出连接。
我刚才有同样的问题。根本无法连接。
重新启动容器,突然传出连接工作正常。容器有可能在更新docker后幸存下来吗?
目前使用Docker版本18.09.3,构建774a1f4
以上是关于如何使用Docker容器建立TCP传出连接?的主要内容,如果未能解决你的问题,请参考以下文章