在docker环境中设置子域

时间:2016-03-22 08:14:26

标签: nginx docker subdomain

我在家里的Ubuntu服务器(14.04 Trusty Tahr)上运行Docker Containers中的不同服务。我目前的安装程序如下:

  • Jenkins jenkins.slarti
  • Gitlab和leanlabs.io在gitlab.slarti下
  • servlet.slarti(apache tomcat)下的Java Servlet Webserver
  • web.slarti(nginx)下的“普通”Web服务器

这些域名是虚拟主机,我已经设置了nginx代理。

Nginx-proxy docker run:

docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock jwilder/nginx-proxy
詹金斯码头运行:

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

普通网络服务器泊坞窗运行:

sudo docker run --name nginx1 -P -d --expose 80 -e VIRTUAL_HOST=web.slarti nginx

Gitlab& leanlabs.io docker run:

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 run:

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等。如果我在浏览器中输入他们的网址,我也无法访问这些域名。

我可以通过slarti:8888访问Apache Tomcat但是我想通过servlet.slarti到达它,但由于我没有DNS设置而失败。

我需要做些什么才能到达子域名web.slarti,servlet.slarti等?如何正确设置反向代理以便我可以访问域?我如何配置DNS?

2 个答案:

答案 0 :(得分: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,而Nginx会将您重定向到正确的Docker容器(如果 VIRTUAL_HOST 环境变量配置为 gitlab.slarti )。

答案 1 :(得分:0)

  1. 为机器的根IP地址(您的Ubuntu服务器)添加*.example.com的A记录。
  2. 然后开始绑定要与多个运行不同服务的docker容器绑定的子域。
  3. 例如:

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