好家伙,折腾了这个问题折腾了一天,刚才终于搞定了,简直不要太高兴

事情是这样的,我现在要折腾基于 Docker 的自动化部署,然后我的项目已经打包好了,但是运行起来有问题,一直说连不上 mysql

然后呢? 就递归折腾(不是) 我就感觉肯定是网络的事情

然后就想是不是要折腾容器间通信,但是把 mysql 跑在 docker 里面肯定有不少损耗吧,问了下助手里面的大佬,结论也是这样

那么,现在的问题就是,如何让 Docker内程序如何访问宿主机的端口

然后我就去搜哇,看各种文章博客去各种平台,还看了些项目,看他们是怎么解决的

但是助手的项目自然都是读服务器上的配置文件,我也看不见

去看 docker 相关的教程,但都感觉好像没遇见这个问题一样,提都不提

去网上查这个问题,有的说就 docker 启动的时候有个网卡,然后直接连它的 ip 就行,但是我没搞定

有的说启动的时候指定 host 模式,这个在 Linux 上的确可以(当然是后面发现的),但是我在 Mac 上不行,也没报错,就这样又折腾了好久

然后去翻官方文档这是个什么玩意,然后我就看见了

c3ef83a8de294fa7f758b48cf8d399d0

没事了,人麻了

然后我在服务器上尝试,的确这个 host 是可以的,但是我不相信 Windows和Mac就没有好的方法

最后去谷歌一趟,奶奶的,一分钟搞定

image-20221213235613721

如图所示,简直不要太简单,直接用 host.docker.internal 即可

image-20221213235716153

然后看见访问的实际是 192.168.65.2 ,我就想到了这篇

image-20221214003307913

的确,貌似和我的 192.168.65.0 一个网段,但是并不和它说的一样

image-20221214003410287

国内什么垃圾互联网啊🤔(迫真

PS:如果遇到这种情况

image-20221214181100918

请在你的 docker-compose.yml 的服务中加上

1
2
extra_hosts:
- "host.docker.internal:host-gateway"

例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
version: '3.5'

services:
hello-api:
build:
context: .
dockerfile: hello/Dockerfile
environment:
- TZ=Asia/Shanghai
privileged: true
volumes:
- ./etc:/app/etc
ports:
- "8888:8888"
stdin_open: true
tty: true
extra_hosts:
- "host.docker.internal:host-gateway"

来源:https://stackoverflow.com/questions/70505750/lookup-host-docker-internal-no-such-host