【问题标题】:How to link docker containers?如何链接码头集装箱?
【发布时间】:2015-12-15 12:18:38
【问题描述】:

我已尝试链接我的 docker 容器,但似乎在访问时出错。

我的结构如下:

  1. 数据库 docker(Mysql) - 容器名称为 um-mysql
  2. 后端 docker(Tomcat) - 镜像名称为 cz-um-app
  3. 前端 docker(Nginx) - 镜像名称为cz-um-frontend

后端与数据库 docker 的链接如下完成,并且运行良好:

$ docker run -p 8080:8080 --name backendservices --link um-mysql:um-mysql cz-um-app

前端与后端的链接如下:

$ docker run -p 80:80 --name frontend --link backendservices:backendservices cz-um-frontend

但是,前端与后端的链接不起作用。

我有一个登录页面,在提交时,它访问一个 url http://backendservices:8080/MyApp

在控制台中,它显示错误为:

net::ERR_NAME_NOT_RESOLVED

不确定为什么后端容器与数据库的链接工作正常,而前端与后端的情况不同。 我需要为此在 Nginx 中配置一些设置吗?

主机条目如下,我也可以 ping 后端服务:

【问题讨论】:

  • 与问题无关,但对于设置开发堆栈,我强烈建议使用docker-composedocs.docker.com/compose
  • docker logs backendservices 给出什么输出?您尝试了哪些进一步的步骤来解决此问题?
  • 我检查了后端服务的日志,但没有日志条目,因为请求直到后端服务容器才到达。我已经使用主机条目快照更新了问题,并通过 ping 验证了后端服务。 Nginx conf 中是否需要任何配置?
  • 我正在阅读一本非常有趣的关于 Docker 的手册。我知道--link 已被弃用,因此我找不到此命令的语法。语法是--link container1:container2 吗?

标签: docker


【解决方案1】:

首先,您不需要为backendservices 映射8080:8080:backendservices 图像中的任何EXPOSEd 端口对于链接到它的任何其他容器都是可见的。无需主机端口映射。

其次,如果后端已注册,您可以检查您的前端:

docker exec -it frontend bash
cat /etc/hosts

如果不是,请检查docker ps -a 以查看后端是否仍在运行。

【讨论】:

    猜你喜欢
    • 2019-01-05
    • 2018-01-20
    • 2020-06-14
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    相关资源
    最近更新 更多