gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 19:28:33 27 4
gpt4 key购买 nike

我对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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com