DNS无法在两个链接的Docker容器之间工作-getaddrinfo EAI_AGAIN错误

时间:2018-08-02 08:58:28

标签: docker dns containers postman

我正在尝试建立一个临时环境,在该环境中可以对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,但这没有什么区别。有什么明显的地方我做错了吗?

1 个答案:

答案 0 :(得分:1)

设置完成后,newman_runner容器没有--link mongo_local,这就是为什么它看不到的原因。

Docker一直不鼓励显式容器间链接。如果您创建一个Docker内部网络并将每个容器附加到该容器上

docker network create testnet
docker run --net testnet ...

它将能够通过它们的--name看到同一网络上的所有其他容器,而无需显式的--link