我在主机10.11.12.13上的docker容器'A'上侦听端口0.0.0.0:8443->8443/tcp我在同一主机上有另一个容器'B'想通过主机与8443上的'A'对话。因此,当我在B内运行命令curl https://10.11.12.13:8443时,出现“没有通往主机的路由”错误,但我可以成功ping 10.11.12.13。我不确定我还缺少什么?

有人可以帮忙解决这个问题吗?

评论

您的容器具有确切的含义:没有通向主机的路由,您的容器具有不同的IP,您必须为docker run提供适当的参数才能访问主机,我无法从内存中记住它们,但这就是搜索

@Tensibai但是我如何能够ping通从容器托管的主机?

我尝试重现,使用命令“ nc -l 8443”启动容器A以侦听该端口,并使用命令“ nc HOST_IP 8443”启动容器B,并且它可以正常工作,容器可以通过主机进行通信。

#1 楼

Docker实际上为容器之间的联网提供了DNS支持。这意味着,如果您将数据库连接定义为:

http://redis:6379


,前提是您满足以下条件,这会将redis解析为正确的网络地址:


所有容器都在同一网络上
这些容器已被命名为

这可以通过cli启动两个实例来手动完成,也可以通过docker compose自动执行脚本,这是我的建议。在版本3的撰写脚本中,您将定义两个服务(即容器):

version: "3"
services:
  web:
    build: ./web
    container_name: web
    networks:
      - backend
    command: bash -c "./start.sh"

  redis:
    image: redis:3.2
    container_name: redis
    networks:
      - backend


在文件末尾,定义网络实例应连接到:

networks:
  backend:


评论


Docker Compose的版本2引入了服务配置,而不是3。v3是针对Docker Swarm的,而v2具有更多面向主机的功能,这两个功能都是独立开发的,建议v2在Swarm集群之外使用。

–chupasaurus
18-2-5在20:40



没错,它是在v2中引入的。但是,我找不到支持它们独立开发的参考。 3似乎是2的简化:docs.docker.com/compose/compose-file/compose-versioning / ...

–莫里茨
18-2-5在20:51

查看发布页面,仍为v2添加了新功能,而v3现在支持v2中的某些功能(即3.4中的卷名在2.1+中)。

–chupasaurus
18年2月5日在22:46