Dockercompose无法使用主机名

时间:2018-12-20 13:31:22

标签: docker docker-compose localhost

我对Docker来说还很陌生,但是正在尝试使用docker compose对我的应用程序运行自动化测试。

我设法让docker组成了运行我的应用程序并运行自动化测试的步骤,但是,当我的应用程序在localhost上运行时,当我需要针对特定​​域example.com运行它时

从对docker的研究看来,您应该可以通过在links中进行设置来在主机名上运行该应用程序,但我似乎仍然无法这样做。

以下是我的docker撰写文件的代码...

docker-compose.yml

abc:
  build: ./
  command: run container-dev
  ports:
    - "443:443"
  expose:
    - "443"

docker-compose.automation.yml

tests:
  build: test/integration/
  dockerfile: DockerfileUIAuto
  command: sh -c "Xvfb :1 -screen 0 1024x768x16 &>xvfb.log && sleep 20 && DISPLAY=:1.0 && ENVIRONMENT=qa BASE_URL=https://example.com npm run automation"
  links:
    - abc:example.com
  volumes:
    - /tmp:/tmp/

并且正在使用以下命令来运行...

docker-compose -p tests -f docker-compose.yml -f docker-compose.automation.yml up --build

是否缺少将example.com映射到localhost的东西?

1 个答案:

答案 0 :(得分:1)

如果两个容器在同一个Docker内部网络上,则Docker将提供DNS服务,其中一个容器可以通过其容器名称与另一个容器进行通信。如您用两个单独的docker-compose.yml文件所示,这有点棘手,因为Docker Compose希望将每个文件隔离到自己的独立mini-Docker世界中。

第一步是在“第一个” docker-compose.yml文件中explicitly declare a network。默认情况下,Docker Compose会自动为您创建一个网络,但是您需要控制其名称,以便可以从其他地方引用它。这意味着您需要一个顶级networks:块,并将容器连接到网络。

version: '3'
networks:
  abc:
    name: abc
services:
  abc:
    build: ./
    command: run container-dev
    ports:
      - "443:443"
    networks:
      abc:
        aliases:
          - example.com

然后,您可以在测试文件中将其导入为external网络。

version: 3
networks:
  abc:
    external: true
    name: abc
services:
  tests:
    build: test/integration/
    dockerfile: DockerfileUIAuto
    command: sh -c "Xvfb :1 -screen 0 1024x768x16 &>xvfb.log && sleep 20 && npm run automation"
    environment:
      DISPLAY: "1.0"
      ENVIRONMENT: qa
      BASE_URL: "https://example.com"
    networks:
      - abc

鉴于您要显示的“测试”容器的复杂性,我强烈建议您不要在Docker中运行它,或者编写一个启动X服务器,检查其是否真正启动然后运行的Shell脚本。考试。 docker-compose.yml文件不是您在这里拥有的唯一工具。