docker - Docker Compose无法使用主机名访问

标签 docker docker-compose localhost

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

我设法让docker compose运行我的应用程序并运行自动化测试,但是,当我的应用程序需要针对特定​​域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的东西吗?

最佳答案

如果两个容器都在同一个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文件不是您在这里拥有的唯一工具。

关于docker - Docker Compose无法使用主机名访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53869731/

相关文章:

Docker-compose traefik PathPrefixStrip 无法正常工作

docker - services.networks : 'my_network' 的配置选项不受支持

docker - 本地Docker与Kubernetes集群的连接

docker - '--disable-dev-shm-usage' 不能解决 Docker 中的 Chrome 崩溃问题

docker - 如何在应用程序内部使用Kubernetes Pod或部署IP

docker - 为什么 docker 容器总是被杀死

php - localhost/live - 通过 HTTP_HOST 检测

php - 我无法在我的数据库中插入数据。我哪里错了?

php - 如何从其他位置运行 php 文件?

spring-boot - 在 Azure Functions : Permission denied with server. 端口上运行 Spring Boot native 应用程序:80