闪亮的服务器在部署到Docker Swarm时未暴露端口3838

时间:2019-02-05 19:10:22

标签: r docker networking shiny port

我们有大量的Shiny应用程序已经使用Swarm模式在Docker上运行了一年多。几周前,当部署新的Shiny应用程序(甚至是现有应用程序的精确副本)时,在查询它们时,我们从处理反向代理的Traefik应用程序中收到“错误网关”错误。

在Docker EE工程师的一些帮助下,我们将问题确定为Shiny服务未在应用容器中打开端口3838。我们已经验证了Traefik服务已正确配置并运行,并且使用Traefik结合Rocker / Geospatial Docker镜像在群集中现有的应用程序已经运行了数周/数月,没有出现问题。仅当我们在端口3838上使用Shiny部署新应用程序或重新部署现有(未修改)应用程序时,才会出现“错误网关”问题。

当查询一个有问题的应用程序时,您可以从Traefik服务中看到过滤的日志:

traefik_traefik.0.en3n1fjgtdc1@mcsfvlidokas01b.XXX.com | time="2019-02-05T16:25:57Z" level=warning msg="Error forwarding to http://10.1.0.175:3838, err: dial tcp 10.1.0.175:3838: getsockopt: connection refused"

对Docker容器/网络的检查表明,从Traefik到包含问题应用程序的Docker容器的连接有效。但是,此问题是,已指示Shiny侦听端口3838,但是在部署它时,它不会打开该端口。这是问题应用程序的prod版本的转储,该版本已经运行了数月而没有任何问题(请注意,端口3838已打开,应该打开):

sudo docker exec 68dfad0b1d03 ss -tnlp
State      Recv-Q Send-Q Local Address:Port  Peer Address:Port
LISTEN     0      128    *:8787              *:*
LISTEN     0      128    127.0.0.11:35476    *:*
LISTEN     0      128    *:3838              *:*   users:(("shiny-server",pid=128,fd=10))

sudo docker logs 68dfad0b1d03
[fix-attrs.d] applying owners & permissions fixes...
[fix-attrs.d] 00-runscripts: applying...
[fix-attrs.d] 00-runscripts: exited 0.
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] add: executing...
Nothing additional to add
[cont-init.d] add: exited 0.
[cont-init.d] userconf: executing...
[cont-init.d] userconf: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.

现在查看查询其URL时返回“错误网关”错误的QA容器。您会注意到这里的端口3838未打开:

 sudo docker exec 585956a64670 ss -tnlp
State      Recv-Q Send-Q Local Address:Port  Peer Address:Port
LISTEN     0      128     *:8787             *:*
LISTEN     0      128    127.0.0.11:44543    *:*

sudo docker logs 585956a64670
[fix-attrs.d] applying owners & permissions fixes...
[fix-attrs.d] 00-runscripts: applying...
[fix-attrs.d] 00-runscripts: exited 0.
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] add: executing...
Nothing additional to add
[cont-init.d] add: exited 0.
[cont-init.d] userconf: executing...
[cont-init.d] userconf: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.

我们使用的是Rocker / Geospatial图像的3.4.1版本,它在整整一年中都没有变化。上面应用的产品版本与质量检查版本完全相同,只是质量检查版本是最近才部署的,产品版本已经启动并运行了几个月。部署脚本,基本的Rocker / Geospatial映像没有区别,没什么...

这里是Dockerfile,用于部署两个版本的应用程序:

version: '3'

services:
  pm_app:
    image: gitlab.XXX.com:5005/gaashiny/implementationreport:${APP_ENV} 
    environment:
      - APP_ENV=${APP_ENV}
    volumes:
      - /ABCXYZ/global:/ABCXYZ/global
    networks:
      - traefik_public
    deploy:
      placement:
        constraints: [node.role == worker]
      mode: replicated
      replicas: 1
      labels:
        traefik.port: 3838
        traefik.frontend.rule: Host:implementation.${APP_ENV}.gswarm.XXX.com
        traefik.docker.network: traefik_public

networks:
  traefik_public:
    external: true

这是shiny-server.conf文件:

run_as shiny;

server {
  listen 3838;

  location / {

    app_dir /srv/shiny-server/implementation;

    log_dir /ABCXYZ/global/srv/implementation/log;

  }

} 

最后是start_shiny.sh文件:

#!/bin/bash
echo "export GAAMAHI_APP_ENV=$APP_ENV" >> /etc/profile
eval "$@"

我们为此进行了数周的努力,终于在Shiny应用程序中将其归零,但未公开3838端口。但是我们不知道为什么...任何代码都没有改变,即使Docker EE安装也没有自八月以来没有改变。

0 个答案:

没有答案
相关问题