无法从Docker容器内访问外部URL

3
我正在尝试从在AWS EC2实例上运行的Docker容器内访问外部URL。虽然我能够从EC2实例进行CURL,但是同样的CURL无法从Docker容器内工作。基本上,这个CURL在EC2实例中工作,但在Docker容器内却不工作。为什么会这样呢?

curl https://elasticsearch.myorg.com

Dockerfile:
FROM docker.elastic.co/kibana/kibana:6.5.0
ENV ELASTICSEARCH_URL=https://elasticsearch.myorg.com
EXPOSE 5601
CMD ["/usr/local/bin/kibana-docker"]

这个URL是真实的例子还是占位符? - Shardj
该URL是一个占位符。由于它指向我的组织中的Rout53弹性端点,因此没有提及实际端点的意义。这里的关键是,在EC2内部可以curl该elasticsearch端点。但从Docker容器内部看,它会超时。 - Dorian McAllister
你尝试过连接到 Docker 容器并从那里 ping 终端点吗? - Shardj
抱歉,您能再澄清一下吗?“您是否尝试过连接到Docker容器?”具体是附加什么?如果您的意思是我是否尝试以交互模式运行Docker容器,并从其中登录并ping端点,那就是我发现curl无法从容器中工作的方式。 - Dorian McAllister
尝试后的响应消息是什么? - Shardj
它只是一直卡住了。不过我注意到了一些事情。如果我在本地运行elasticsearch,并且使用以下命令启动我的kibana(将网络桥绑定到localhost),则一切都正常运作:docker run -d -p 33000:5601 --net=host -e ELASTICSEARCH_URL=http://localhost:9200。但是,当我将我的ELASTICSEARCH_URL更改为https://elasticsearch.myorg.com时,它就不起作用了。我觉得docker网络正在发挥作用,但我并不知道具体原因。 - Dorian McAllister
1个回答

7
经过大量的尝试和错误,我终于找出了问题所在。 看起来使用标准的命令运行docker镜像是不够的:
docker run -d -p 5601: 5601 my-kibana-image:1
主机解析到elasticsearch(外部主机)仅在我将网络配置从默认更改为“host”时才有效。这样做:
docker run --net = host -d -p 5601: 5601 my-kibana-image:1
最终解决了问题,kibana容器实例终于能够与elasticsearch通讯! Kibana正确引导,此时我可以顺利启动它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接