【Docker】windows环境下的docker如何开放远程2375端口

前言

截止至文章发表时,DockerDesktop的最新版本为v4.11.1。本文以该版本为准。

Docker在windows运行在Hyper-v的虚拟机中或者wsl windows子系统中。

原因说明

网上大部分的操作都无法解决远程访问的问题

比如,在DockerDesktop的settings中勾选Expose daemon on tcp://localhost:2375 without TLS,也只是开启localhost/127.0.0.1端口2375的监听。这个是无法实现开启远程访问的

【Docker】windows环境下的docker如何开放远程2375端口_第1张图片

 再比如说,在上一步基础上,在Docker Engine添加。这里确实是可以监听任何ip的2375端口。按理来说是可行的,实际上却无法是实现远程访问的!

"hosts": ["tcp://0.0.0.0:2375"]

【Docker】windows环境下的docker如何开放远程2375端口_第2张图片

原因:别忘了文章前说的,windows环境下的Docker是运行在Hyper-v的虚拟机中或者是wsl windows子系统中,这些虚拟机和宿主机是NAT方式连接的,宿主机的物理网络和虚拟机网是不在同一子网中。

因此在上面两步的基础上,还需要解决虚拟机和宿主机网络不在同一子网的问题。

解决方案

多方寻找,在IBM的某个产品文档里找到了一个方式,解决虚拟机与宿主机不在同一子网上时通过宿主机ip访问docker守护进程

IBM DocumentationIBM Documentation.https://www.ibm.com/docs/en/addi/6.1.0?topic=prerequisites-configuring-docker-engine-listen-tcp-socket【Docker】windows环境下的docker如何开放远程2375端口_第3张图片

 重点看截图红框框,对于使用DockerDesktop,需要在宿主机设置代理监听本地127.0.0.1:2375。

因此,正确步骤就是

1、在DockerDesktop的settings中勾选Expose daemon on tcp://localhost:2375 without TLS,点击“Apply & Restart”,重启DockerDesktop

2、在CMD(管理员模式)中执行命令

#替换 为 docker 主机的公共 IP 地址
netsh interface portproxy add v4tov4 listenport=2375 listenaddress= connectaddress=127.0.0.1 connectport=2375

就可以正确开放远程2375端口了

宿主机使用本机ip可以访问,但其他机器访问宿主机ip不通,则需要在windows防火墙开放端口

防火墙配置中,入站和出站都需要开放2375端口


补充

1、解决方案第2步设置代理无效或者windows重启后失效,需要检查IP Help服务正常运行,重启该服务即可。建议将其设为自动启动。

【Docker】windows环境下的docker如何开放远程2375端口_第4张图片

 【Docker】windows环境下的docker如何开放远程2375端口_第5张图片

 

2、解决方案第2步除了使用netsh命令添加代理,也可以在宿主机上使用nginx转发127.0.0.1:2375 

# nginx配置文件nginx.conf添加如下配置
stream {
    server {
        listen 2375;
        proxy_pass 127.0.0.1:2375;
    }
}

如何使用nginx转发,可以参考我的另一篇文章

使用nginx进行端口转发_源林氏的博客-CSDN博客_nginx 端口转发# 编译nginx的时候要添加stream模块 ./configure –with-stream# 这个模块实现了网络层和传输层的的转发、代理、负载均衡等stream { # stream与http配置同级 server { listen 13306; proxy_pass 192.168.8.168:3306; # 有了这个server配置,你就可以通过跳板机ip+13306端口访问内网的mysql库了 } server { ......https://blog.csdn.net/ET1131429439/article/details/116045306

你可能感兴趣的:(Docker,docker,运维,容器)