Docker替代macOS和Windows上的--network主机

时间:2019-01-13 01:51:09

标签: docker docker-container docker-networking docker-network docker-run

我有两个docker容器:

  • 数据库
  • 消耗数据库的应用

我这样运行数据库容器:

docker run --name my-db -p 127.0.0.1:3306:3306 my-db-image

我的应用容器如下:

docker run --name my-app --network host -it my-app-image

这在Linux上工作正常。我可以从主机系统和应用程序容器访问数据库。完美。

但是--network host在Mac和Windows上不起作用:

  

主机网络驱动程序仅适用于Linux主机,而Mac的Docker,Windows的Docker或Windows Server的Docker EE不支持该主机网络驱动程序。

(来源:https://docs.docker.com/network/host/

我仍然可以从主主机通过127.0.0.1:3306访问数据库,但是不能从应用程序容器访问数据库。

如何解决此问题?如何让应用容器连接到数据库(并继续使用127.0.0.1:3306从主主机访问数据库)?

我尝试使用host.docker.internalgateway.docker.internal,但是它不起作用。

在使用--network my-network创建my-network之后,我还尝试过使用docker network create my-network启动两个容器,但这是行不通的。

我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:2)

对于多种服务,创建docker-compose.yml文件通常会更容易,该文件将启动所有服务以及连接它们所需的任何网络。

version: '3'
services:
  my-db:
    image: my-db-image
    ports:
      - "3306:3306"
    networks:
      - mynetwork

  my-app:
    image: my-app-image
    ports:
      - "8000:80"
    networks:
      - mynetwork

networks:
  mynetwork:

在项目文件夹中,运行docker-compose updocker-compose up -d,以使服务在后台运行。

在这种情况下,Docker的神奇之处在于提供了一个主机名为“ mynetwork”的网络。它应将默认端口公开给该网络上的其他服务。如果要重新映射端口,则模式为target:source。

我不知道您是否需要此处的“端口”配置。但是我正在尝试将您的配置映射到撰写文件。另外,我假设您需要在某个端口上公开该应用程序;使用8000,因为这是很常见的设置。

这里的参数是什么? Docker-compose reference