无法从主机docker访问Windows堆栈的容器IP

时间:2018-09-26 12:12:08

标签: docker docker-swarm docker-windows

我正在使用以下docker compose文件来构建具有在Windows 10中部署的Windows容器的docker swarm堆栈:

version: '3.2'

services:
  service1:
    image: myrepository/dotnet-framework:3.5-windowsservercore
    environment:
      - my_path="C:/app/build/app.exe"
      - my_arg= 1
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.id == asdfasdgasgasg
    volumes:
      - service1:C:/app
  service1:
    image: myrepository/dotnet-framework:3.5-windowsservercore
    ports:
      - target: 7878
        published: 7878
        mode: host
    environment:
      - my_path="C:/app/app.exe"
      - my_arg= 2
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.id == asdfasdgasgasg
    volumes:
      - service1:C:/app

volumes:
  service2:
    external:
      name: service1
  service1:
    external:
      name: service1

您会看到service2正在端口7878中监听。我知道,如this帖子中所示,我无法使用localhost:7878到达此端口。因此,我运行命令docker inspect containerID来找出容器的IP地址。

enter image description here

如果我从service2对容器service1进行ping操作,它将响应。但是,如果我尝试从主机访问端口10.0.3.18:7878,则没有任何响应。我怎么能从热点到达7878端口?另一方面,我有必须到达“ service2” windows容器的Linux容器。

2 个答案:

答案 0 :(得分:0)

默认情况下,服务中的每个Docker容器可以在自己的专用网络上启动时彼此通信。这就是为什么您可以在服务容器之间执行ping操作。

您打开的端口7878也将通过主机的ip地址而不是容器ip地址访问主机窗口10 os。容器的IP地址甚至对于主机操作系统也是私有的。

由于您尚未打开服务中的ping端口,并且图像中可能没有ping服务来响应您的ping请求,因此ping可能无法正常工作。关于这最后一点我可能是错的。 Ping不是验证容器是否正常工作的好方法。

答案 1 :(得分:-1)

Windows已更新,一切正常。