docker 网络问题 host.docker.internal 不生效?

docker访问宿主机数据库

host.docker.internal 域名不生效的问题

容器无法通过 来访问宿主机的数据库

下面是我的laravel 数据库配置文件

DB_CONNECTION=mysql
DB_HOST=host.docker.internal
DB_PORT=3306
DB_DATABASE=sign
DB_USERNAME=root
DB_PASSWORD=root

docker 版本号

Client: Docker Engine - Community
 Version:           20.10.18
 API version:       1.41
 Go version:        go1.18.6
 Git commit:        b40c2f6
 Built:             Thu Sep  8 23:12:08 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.18
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.18.6
  Git commit:       e42327a
  Built:            Thu Sep  8 23:09:59 2022
  OS/Arch:          linux/amd64
  Experimental:     true
 containerd:
  Version:          1.6.8
  GitCommit:        9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

docker 网络环境

NETWORK ID     NAME          DRIVER    SCOPE
65f4ef08be97   bridge        bridge    local
069421d52823   host          host      local
3aeb2a0179ee   none          null      local
d2199f6e2dc2   php_default   bridge    local

我看到docker 说 在17.12 以上版本就可以使用host.docker.internal 直接访问宿主机。但是我的并未生效,无法访问数据库直接 2002 错误,用宿主机ip 是可以访问的。

请问:

  • 这是什么原因呢?是哪里没有配置好,是漏掉了什么吗?
  • 我就是想用主机名来替代ip,请问还有什么的好办法?比如给容器添加个host,哪又怎么来动态生成呢?(可以使用docker-compose)
阅读 10.9k
2 个回答

host.docker.internal 是一个开发功能,只在 Docker Desktop 有效。你用的是 Docker Desktop 吗?(Linux 下一般都不是)

https://docs.docker.com/deskt...

The host has a changing IP address (or none if you have no network access). We recommend that you connect to the special DNS name host.docker.internal which resolves to the internal IP address used by the host. This is for development purpose and does not work in a production environment outside of Docker Desktop.

Docker 宿主机默认ip 为 172.17.0.1 可以在容器中使用这个ip来访宿主机的服务。

也可以更改 /etc/docker/daemon.json 来绑定指定的ip

{
    "bip":"172.0.0.1/24"
}

踩过的坑

在dockerFile 里面直接操作hosts 文件是不被允许的

#0 0.161 /bin/sh: 1: cannot create /etc/hosts: Read-only file system

但又不想每次容器运行去覆盖hosts文件 使用CMD 命令

建议还是取个能记住的ip 地址得了,折腾好久了!!!!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏