在Docker环境中设置子域名

3
我在家里的Ubuntu服务器(14.04 Trusty Tahr)上,使用Docker容器运行不同的服务。目前我的设置如下:
  • Jenkins jenkins.slarti
  • Gitlab和leanlabs.io都在gitlab.slarti下
  • Java Servlet Web服务器在servlet.slarti下(apache tomcat)
  • "普通" Web服务器在web.slarti下(nginx)
这些域名都是虚拟主机,并且我已经设置了一个nginx代理。
Nginx-proxy docker run:
docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock jwilder/nginx-proxy

Jenkins docker运行:
docker run -d --name jenkinsci --expose 8080 -e VIRTUAL_HOST=jenkins.slarti -e VIRTUAL_PORT=8080 jenkins

普通的 Web 服务器 Docker 运行:
sudo docker run --name nginx1 -P -d --expose 80 -e VIRTUAL_HOST=web.slarti nginx

Gitlab和leanlabs.io的Docker运行:
docker run -d  --link kanban_redis:kanban_redis -p 80:80 -e KANBAN_SERVER_HOSTNAME="http://localhost"  -e KANBAN_GITLAB_URL="http://mygitlab.com"  -e  KANBAN_REDIS_ADDR="kanban_redis:6379" --expose 80 -e VIRTUAL_HOST=gitlab.slarti leanlabs/kanban:1.4.0

Apache Tomcat Docker 运行:
docker run -it --rm -p 8888:8090 -e VIRTUAL_HOST=servlet.slarti tomcat:8.0

我按照这个指南进行了设置:http://blog.florianlopes.io/host-multiple-websites-on-single-host-docker 目前我无法ping web.slarti、servlet.slarti等子域名,如果在浏览器中输入它们的url也无法访问。
我可以通过slarti:8888访问Apache Tomcat,但我想通过servlet.slarti访问它,但因为没有DNS设置,所以失败了。
我需要做什么才能访问子域名web.slarti、servlet.slarti等?我如何正确设置反向代理以便访问这些域名?我需要如何配置DNS?

我真的无法弄清楚问题所在,也不知道你提出了什么问题,以及你尝试了什么。 - Auzias
你能ping通他们的IP地址吗?如果可以,那么你没有DNS解析。 - Daniel W.
我可以在客户端上ping容器的IP,但总是会有数据包的完全丢失。 - salocin
2个回答

1

我不是网络专家,但阅读了您的帖子后,似乎您确实需要这样的DNS配置:

A -> slarti (or IP)
CNAME jenkins.slarti -> slarti
CNAME gitlab.slarti -> slarti
CNAME servlet.slarti -> slarti
CNAME web.slarti -> slarti

这是我将子域名重定向到Docker容器所做的工作。
没有正确的DNS配置,您无法访问子域名。
通过这个DNS配置,每次您请求gitlab.slarti时,实际上都会到达Nginx,然后将您重定向到适当的Docker容器(如果VIRTUAL_HOST环境变量被配置为gitlab.slarti)。

0
  1. 为机器(您的Ubuntu服务器)的根IP地址添加一个*.example.com的A记录。
  2. 然后开始绑定尽可能多的子域名,这些子域名将与运行不同服务的多个Docker容器绑定。

例如:

docker run -d --name jenkinsci --expose 8080 -e VIRTUAL_HOST=jenkins.slarti -e VIRTUAL_PORT=8080 jenkins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接