如何将youtrack,upsource和teamcity连接到所有在同一台计算机上作为docker容器运行的集线器

时间:2018-06-14 11:53:09

标签: docker teamcity youtrack upsource jetbrains-hub

由于我们是一个小团队,我们希望将JetBrains的Hub,Youtrack,Upsource和Teamcity作为docker容器(目前所有都在同一台机器上)。 Docker在ESXi 6.7上运行的Photon OS 2.0上运行。另一个容器中的Nginx充当DNS代理,因此现在可以在端口80上使用自己的域名访问所有服务...

我运行了所有5个服务,并且可以在浏览器中访问它们。然而,将Youtrack,Upsource和Teamcity连接到Hub是一项挑战。 Youtrack,Upsource和Teamcity要求Hub URL确认并获得访问Hub的许可。

问题:

  • 中心网址:http://hub.teamtools.mydomain.com - >容器无法在该地址下访问它,并且验证失败并超时
  • 中心网址:http://172.18.0.3:8080 - >容器可以访问内部docker net上的Hub,然后显示一个弹出窗口,它试图通过重定向到该内部IP上的Hub来显示确认页面,当然这在浏览器中失败了(我试图将弹出的URL复制到一个新窗口,并在那里调整它作为黑客,但这不起作用。)

问题:

  1. 如何将Youtrack,Upsource和Teamcity链接到Hub?为了使混淆过程起作用,docker容器需要能够使用外部IP /域名相互访问。
  2. 是否有人反对在同一台机器上安装所有四个Teamtools,以便随着需求的增长将它们分开?
  3. 到目前为止

    配置:

    容器已经变成了这样的服务:

    /etc/systemd/system/docker.nginx.servcie

    [Unit]
    Description=Nginx DNS proxy
    After=docker.service
    Requires=docker.service
    
    [Service]
    TimeoutStartSec=0
    Restart=always
    ExecStartPre=/usr/bin/docker network create --subnet=172.18.0.0/16 dockerNet
    ExecStartPre=-/usr/bin/docker exec %n stop
    ExecStartPre=-/usr/bin/docker rm %n
    ExecStartPre=/usr/bin/docker pull jwilder/nginx-proxy
    ExecStart=/usr/bin/docker run --rm --name %n \
        -v /var/run/docker.sock:/tmp/docker.sock:ro \
        --net dockerNet --ip 172.18.0.2 \
        -p 80:80 \
        jwilder/nginx-proxy
    
    [Install]
    WantedBy=multi-user.target
    

    /etc/systemd/system/docker.hub.service

    [Unit]
    Description=JetBrains Hub Service
    After=docker.nginx-proxy.service
    Requires=docker.nginx-proxy.service
    
    [Service]
    TimeoutStartSec=0
    Restart=always
    ExecStartPre=-/usr/bin/docker exec %n stop
    ExecStartPre=-/usr/bin/docker rm %n
    ExecStartPre=/usr/bin/docker pull jetbrains/hub:2018.2.9635
    ExecStart=/usr/bin/docker run --rm --name %n \
        -v /opt/hub/data:/opt/hub/data \
        -v /opt/hub/conf:/opt/hub/conf \
        -v /opt/hub/logs:/opt/hub/logs \
        -v /opt/hub/backups:/opt/hub/backups \
        --net dockerNet --ip 172.18.0.3 \
        -p 8010:8080 \
        --expose 8080 \
        -e VIRTUAL_PORT=8080 \
        -e VIRTUAL_HOST=hub,teamtools.mydomain.com,hub.teamtools.mydomain.com \
        jetbrains/hub:2018.2.9635
    
    [Install]
    WantedBy=multi-user.target
    

    ......等等。因为我还在尝试,所以端口映射在主机上并暴露出来,因此nginx-proxy可以接收它们。我还在容器中添加了静态IP,希望这对我的问题有所帮助。

    运行这些服务会导致:

    CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS              PORTS                    NAMES
    7ba8ed89b832        jetbrains/teamcity-server         "/run-services.sh"       12 hours ago        Up 12 hours         0.0.0.0:8111->8111/tcp   docker.teamcity.service
    5c819c48cbcc        jetbrains/upsource:2018.1.357     "/bin/bash /run.sh"      12 hours ago        Up 12 hours         0.0.0.0:8030->8080/tcp   docker.upsource.service
    cf9dcd1b534c        jetbrains/youtrack:2018.2.42223   "/bin/bash /run.sh"      14 hours ago        Up 14 hours         0.0.0.0:8020->8080/tcp   docker.youtrack.service
    de86c3e1f2e2        jetbrains/hub:2018.2.9635         "/bin/bash /run.sh"      14 hours ago        Up 14 hours         0.0.0.0:8010->8080/tcp   docker.hub.service
    9df9cb44e485        jwilder/nginx-proxy               "/app/docker-entry..."   14 hours ago        Up 14 hours         0.0.0.0:80->80/tcp       docker.nginx-proxy.service
    

    其他信息:

    我确实认为这可能是一个防火墙问题,这篇文章似乎暗示了同样的事情:

    https://forums.docker.com/t/access-docker-container-from-inside-of-the-container-via-external-url/33271

      

    经过与虚拟服务器提供商的讨论后呢   事实证明,plesk防火墙和防火墙之间存在冲突的防火墙规则   iptables导致了这个问题。冲突解决之后   提供者可以访问容器。

    光子上的防火墙,其中规则由docker自动添加:

    Chain INPUT (policy DROP 2 packets, 203 bytes)
     pkts bytes target     prot opt in     out     source               destination
        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
      258 19408 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
        6   360 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
    
    Chain FORWARD (policy DROP 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination
      186 13066 DOCKER-USER  all  --  *      *       0.0.0.0/0            0.0.0.0/0
      186 13066 DOCKER-ISOLATION  all  --  *      *       0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
        0     0 DOCKER     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     all  --  docker0 !docker0  0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     all  --  docker0 docker0  0.0.0.0/0            0.0.0.0/0
      103  7224 ACCEPT     all  --  *      br-83f08846fc2e  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
        9   524 DOCKER     all  --  *      br-83f08846fc2e  0.0.0.0/0            0.0.0.0/0
       74  5318 ACCEPT     all  --  br-83f08846fc2e !br-83f08846fc2e  0.0.0.0/0            0.0.0.0/0
        1    52 ACCEPT     all  --  br-83f08846fc2e br-83f08846fc2e  0.0.0.0/0            0.0.0.0/0
    
    Chain OUTPUT (policy DROP 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination
      300 78566 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0
    
    Chain DOCKER (2 references)
     pkts bytes target     prot opt in     out     source               destination
        8   472 ACCEPT     tcp  --  !br-83f08846fc2e br-83f08846fc2e  0.0.0.0/0            172.18.0.2           tcp dpt:80
        0     0 ACCEPT     tcp  --  !br-83f08846fc2e br-83f08846fc2e  0.0.0.0/0            172.18.0.3           tcp dpt:8080
        0     0 ACCEPT     tcp  --  !br-83f08846fc2e br-83f08846fc2e  0.0.0.0/0            172.18.0.5           tcp dpt:8080
        0     0 ACCEPT     tcp  --  !br-83f08846fc2e br-83f08846fc2e  0.0.0.0/0            172.18.0.4           tcp dpt:8080
        0     0 ACCEPT     tcp  --  !br-83f08846fc2e br-83f08846fc2e  0.0.0.0/0            172.18.0.6           tcp dpt:8111
    
    Chain DOCKER-ISOLATION (1 references)
     pkts bytes target     prot opt in     out     source               destination
        0     0 DROP       all  --  br-83f08846fc2e docker0  0.0.0.0/0            0.0.0.0/0
        0     0 DROP       all  --  docker0 br-83f08846fc2e  0.0.0.0/0            0.0.0.0/0
      186 13066 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0
    
    Chain DOCKER-USER (1 references)
     pkts bytes target     prot opt in     out     source               destination
      186 13066 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0
    

1 个答案:

答案 0 :(得分:1)

原来是防火墙问题。

我以这个https://unrouted.io/2017/08/15/docker-firewall/为起点解决了这个问题。

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:FILTERS - [0:0]
:DOCKER-USER - [0:0]

-F INPUT
-F DOCKER-USER
-F FILTERS

-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp --icmp-type any -j ACCEPT
-A INPUT -j FILTERS

-A DOCKER-USER -i eth0 -j FILTERS

-A FILTERS -m state --state ESTABLISHED,RELATED -j ACCEPT
# full access from my workstation
-A FILTERS -m state --state NEW -s 192.168.0.10/32
-A FILTERS -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A FILTERS -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A FILTERS -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A FILTERS -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A FILTERS -j REJECT --reject-with icmp-host-prohibited

COMMIT