代码之家  ›  专栏  ›  技术社区  ›  Francesco Borzi

Docker替代——MacOS和Windows上的网络主机

  •  0
  • Francesco Borzi  · 技术社区  · 7 年前

    我有两个码头集装箱:

    • 数据库
    • 使用数据库的应用程序

    我像这样运行数据库容器:

    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.internal gateway.docker.internal 但它不起作用。

    我还尝试用 --network my-network 创建后 my-network 具有 docker network create my-network 但它不起作用。

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   Brian Wagner    7 年前

    对于多个服务,通常可以更容易地创建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 up docker-compose up -d 使服务在后台运行。

    在这个场景中,Docker的魔力提供了一个主机名为“MyNetwork”的网络。它应该向该网络上的其他服务公开默认端口。如果要重新映射端口,则模式为target:source。

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

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

    推荐文章