我目前正在学习docker的基础知识。我了解到,当容器需要连接到主机时(假设我有一个本地 mysql 数据库),localhost它必须使用 as 域,而不是用作host.docker.internal域。
所以不要这样:
createConnection(
host: "localhost",
...
)
Run Code Online (Sandbox Code Playgroud)
我会这样做:
createConnection(
host: "host.docker.internal",
...
)
Run Code Online (Sandbox Code Playgroud)
我想我明白为什么会这样,但我只是想澄清为什么 docker 不明白什么localhost意思,以及为什么它必须替换为host.docker.internal.
提前致谢。
docker 非常清楚“localhost”的含义:当您创建容器时,您正在创建一组只能相互看到的隔离进程。它们存在于自己的 cgroup 中用于进程隔离,存在于网络命名空间中用于网络隔离。
因此,当某个容器中的某些服务侦听“localhost:8080”时,该容器中的其他进程可以连接到该端口。但其他容器中的进程则不能。他们可能需要有自己的进程在 localhost:8080 上监听。
在这种环境中,每个容器在虚拟网络上都有自己的 IP 地址,并且需要桥接到主机网络,localhost当然意味着“容器”,而不是“容器主机操作系统”。
这不是 docker 不理解的情况。这种到容器的本地主机重定向是容器化带来的隔离的基础。
| 归档时间: |
|
| 查看次数: |
4818 次 |
| 最近记录: |