我正在尝试建立一个临时环境,在该环境中可以对Web应用程序执行AT。为此,我有3个Docker容器:
容器1:数据库(mongo_local)
docker build -t mongo_local ./test/AT/mongo
docker run --name mongo_local -d -p 27017:27017 mongo_local
容器2(Web应用程序):
docker run --name mywebapp_local -d -p 4431:4431 --link mongo_local -v /applicationdata:/applicationdata mywebapp
容器3(纽曼测试赛跑者):
docker build -t newman_runner ./test/AT/newman
docker run --name newman_runner --link mywebapp_local newman_runner
Web应用程序可以使用以下连接字符串成功访问数据库:mongodb://mongo_local:27017/mydb
,请注意,我能够引用mongo_local,而不必为mongo_local容器指定IP地址。
当我在URL中指定mywebapp_local容器的IP地址(即10.0.0.4)时,newman测试运行程序对Web应用程序运行邮递员测试,并且所有测试都成功执行,但是,如果在URL中指定名称mongo_local,则不会工作。
因此https://mywebapp_local/api/v1/method1
不起作用,但是https://10.0.0.4/api/v1/method1
起作用。
我得到的错误是
getaddrinfo EAI_AGAIN mywebapp_local mywebapp_local:443 at request ...
我尝试在docker run命令中使用-add-host,但这没有什么区别。有什么明显的地方我做错了吗?
答案 0 :(得分:1)
设置完成后,newman_runner
容器没有--link mongo_local
,这就是为什么它看不到的原因。
Docker一直不鼓励显式容器间链接。如果您创建一个Docker内部网络并将每个容器附加到该容器上
docker network create testnet
docker run --net testnet ...
它将能够通过它们的--name
看到同一网络上的所有其他容器,而无需显式的--link
。