我正在使用以下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地址。
如果我从service2
对容器service1
进行ping操作,它将响应。但是,如果我尝试从主机访问端口10.0.3.18:7878
,则没有任何响应。我怎么能从热点到达7878端口?另一方面,我有必须到达“ service2” windows容器的Linux容器。
答案 0 :(得分:0)
默认情况下,服务中的每个Docker容器可以在自己的专用网络上启动时彼此通信。这就是为什么您可以在服务容器之间执行ping操作。
您打开的端口7878也将通过主机的ip地址而不是容器ip地址访问主机窗口10 os。容器的IP地址甚至对于主机操作系统也是私有的。
由于您尚未打开服务中的ping端口,并且图像中可能没有ping服务来响应您的ping请求,因此ping可能无法正常工作。关于这最后一点我可能是错的。 Ping不是验证容器是否正常工作的好方法。
答案 1 :(得分:-1)
Windows已更新,一切正常。