要把docker desktop换成podman desktop发现里面的几个数据库可以通过127.0.0.1访问但不能通过宿主机ip访问然后发现其他容器也有同样的问题。记录一次 Windows 端的 podman 启动的容器应用外部引用无法访问的问题处理 · 测试之家原因上面这篇贴子写了是因为这些 container 其实是安装到 windows 的 linux 子系统中的端口映射的也是linux 子系统不是主 windows 系统。我后续用wsl安装cassandra也出现了相同的问题。解决方法端口映射1.查询wsl子系统的 ip不要直接ipconfig那样看不到我们实际需要的ip1.1 wsl进入linux子系统1.2 ip addr查看eth0的ip注意我不知道我的电脑上为什么ifconfig不行反正ip addr是没问题的千万千万不要用powershellip的蓝字和紫字写的tmd在powershell那个蓝紫底上啥都看不见还是黑底控制台吧2. 写端口映射新开一个控制台输入netsh interface portproxy add v4tov4 listenport3306 listenaddress* connectport3306 connectaddress172.26.122.18connectaddress写刚刚查到的wsl的ip listenaddress*然后查看有没有生成映射netsh interface portproxy show all数据库需要的额外操作按理说一切都OK了但数据库还是不能通过宿主机ip访问。一通查一通问才想起来我们用的数据库默认就是只能本地访问之前部署搭建都要手动改配置文件的。倒也好处理docker-compose文件里加一下环境配置即可。原本version: 3.8 services: postgis: image: docker.1ms.run/postgis/postgis:14-3.3 container_name: postgis ports: - 5432:5432 environment: POSTGRES_PASSWORD: 123456 volumes: - E:\syncFolder\postgis\data:/var/lib/postgresql/data privileged: true restart: always mysql: image: docker.1ms.run/mysql:8.0.28 container_name: mysql ports: - 3306:3306 environment: MYSQL_ROOT_PASSWORD: 123456 volumes: - E:\syncFolder\mysql\db306:/var/lib/mysql - E:\syncFolder\mysql\config306:/etc/mysql/conf.d privileged: true restart: always在environment那里加一句ALLOW_IP_RANGE: 0.0.0.0/0version: 3.8 services: postgis: image: docker.1ms.run/postgis/postgis:14-3.3 container_name: postgis ports: - 5432:5432 environment: POSTGRES_PASSWORD: 123456 ALLOW_IP_RANGE: 0.0.0.0/0 volumes: - E:\syncFolder\postgis\data:/var/lib/postgresql/data privileged: true restart: always mysql: image: docker.1ms.run/mysql:8.0.28 container_name: mysql ports: - 3306:3306 environment: MYSQL_ROOT_PASSWORD: 123456 ALLOW_IP_RANGE: 0.0.0.0/0 volumes: - E:\syncFolder\mysql\db306:/var/lib/mysql - E:\syncFolder\mysql\config306:/etc/mysql/conf.d privileged: true restart: always其他电脑访问本机一切正常了以为万事大吉没想到其他电脑依然不能访问。一通研究后发现还是要在防火墙里加入站规则把端口放开。之前用docker desktop的时候怎么就不用这样呢只能猜是因为docker的后台托管进程比较霸道压根不理Windows自带的防火墙。