Skip to content

Mac下docker访问主机服务

这里说一下我使用Mac时在使用docker环境中遇到的问题,就是Mac的docker在网络堆栈中的限制,导致的无法直接通过172.17.0.1即docker0的网卡ip来访问本机的服务

那么我们有没什么解决的方法呢?

这里根据我们实际的使用情景有以下主要的解决方案

我们想要从我们的镜像来访问我们的Mac主机的服务

由于mac中docker的网络时在Docker Desktop for mac,中实现的,我们无法在我们的主机上看到docker0这个网口,但其实这个接口实际上在虚拟机中。我们想实现这个镜像来访问我们的Mac主机的服务,我们需要查看docker的文档,我们从文档中可以得知,在18.03开始以后的所有版本中,docker官方推荐我们通过host.docker.internal这个DNS来对于我们的服务进行访问,同样的gateway.docker.internal也可以,我们在使用的时候只需要设置我们的host为这个就可以正常使用了

如下, 这个在我们最后上线ubuntu服务器时,只需要我们在docker-compse中设置对应环境变量,就可以覆盖后者了

module.exports = {
  port: 4000,
  db: {
    user: process.env.USER || 'YourDBUser',
    password: process.env.PASSWORD || 'YourDBPassword',
    database: process.env.DATABASE || 'YourDBName',
    options: {
      dialect: process.env.DIALECT || 'host.docker.internal',
      host: process.env.HOST || 'mysql',
      port: 3306,
      define: {
        charset: 'utf8mb4',
        collate: 'utf8mb4_unicode_ci',
        supportBigNumbers: true,
        bigNumberStrings: true
      }
    }
  },
  authServiceToken: {
    secretKey: process.env.SECRET || 'secret'
  }
}
Reference

Networking features in Docker Desktop for Mac