【问题标题】:Docker - how to expose port thru jwilder nginx-proxy?Docker - 如何通过 jwilder nginx-proxy 公开端口?
【发布时间】:2020-05-11 11:38:33
【问题描述】:

我的问题是similar to this one,直到今天显然还没有解决:/ 我正在关注this tutorial 来设置我的 Theia IDE,IDE 正在工作,但我希望打开我的 8080 端口,以便使用终端测试我在 Theia IDE 上托管的 node.js 后端。 这是我用于设置开放端口等的 docker-compose 文件:

version: '2.2'

services:
  eclipse-theia:
    restart: always
    image: theiaide/theia:latest
    init: true
    environment:
      - VIRTUAL_HOST=mydomainhere.com
      - LETSENCRYPT_HOST=mydomainhere.com

version: '2'

services:
  nginx-proxy:
    restart: always
    image: jwilder/nginx-proxy
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
    volumes:
      - "/etc/nginx/htpasswd:/etc/nginx/htpasswd"
      - "/etc/nginx/vhost.d"
      - "/usr/share/nginx/html"
      - "/var/run/docker.sock:/tmp/docker.sock:ro"
      - "/etc/nginx/certs"

  letsencrypt-nginx-proxy-companion:
    restart: always
    image: jrcs/letsencrypt-nginx-proxy-companion
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    volumes_from:
      - "nginx-proxy"

如果我将 expose: - "8080" 添加到 eclipse-theia docker-compose 文件中,则会返回 502 错误... 所以我猜这不是要走的路。我还尝试运行 netcat 来检查 8080 端口是否打开。

更新 当我收到 502 错误时,我在日志中收到以下错误: [error] 136#136: *21 no live upstreams while connecting to upstream 如果我添加 ports: - "8080" 而不是我得到一个 HSTS 错误..

更新 2

我按照以下答案的建议尝试了以下配置:

version: '2.2'

services:
  eclipse-theia:
    restart: always
    image: theiaide/theia:latest
    init: true
    environment:
      - VIRTUAL_HOST=mysubdomain1.domain.com,mysubdomain2.domain.com
      - VIRTUAL_PORT=80,8080
      - LETSENCRYPT_HOST=mysubdomain1.domain.com,mysubdomain2.domain.com
      - LETSENCRYPT_EMAIL=mymail@domain.com

但这似乎也不起作用,端口 8080 似乎根本不起作用。我还尝试在 nginx-proxy 配置上指定端口 8080,但它不起作用:/

【问题讨论】:

    标签: docker nginx docker-compose jwilder-nginx-proxy theia


    【解决方案1】:

    您是否将代理上的 8080 端口用于其他用途? 我只是在代理上使用 80 和 443...

    如果你只在你的 eclipse-theia 上使用 8080,为什么不定义

    ports: 
      - "8080:8080"
    

    在 theia 的 docker compose 上而不是 nginx-proxy 上?

    代理具有意义,在端口 80 和 443 上使用多个域/子域,而不是使用奇怪的端口混乱。

    我无法解释如何像你描述的那样使用它,因为这样使用它对我来说毫无意义,我不会再深入研究。

    【讨论】:

    • ports: - "8080"ports: - "8080:8080" 不一样?因为我已经尝试过了。我希望端口 8080 可以通过 nginx 代理访问,这就是我将其写在那里的原因。可能是一个逻辑错误。
    • 换句话说,我希望端口 8080 应用程序可以通过 nginx 反向代理访问。
    • 不,那不一样。看看这里:docs.docker.com/config/containers/container-networking 当你想使用你的 nginx 代理时,为什么要使用 8080 端口而不是带有 http https 的域/子域?这对我来说毫无意义。?我的建议是不要使用代理,也不要使用代理端口 80/443。
    • 按照您的建议,我尝试使用不同的子域并将 VIRTUAL_HOST 设置为 8080,但效果不佳:/请查看有关问题的更新 2。
    • 刚刚查看了theia镜像,那是监听3000端口...所以你需要配置- VIRTUAL_PORT=3000。有时重新启动 nginx 代理和 letencrypt 容器会有所帮助。如果它仍然不起作用,请查看代理容器的 nginx 日志。通过 并且您应该能够使用这些域之一访问您的 theia 实例。
    【解决方案2】:

    所以我要做的就是将配置设置为:

    version: '2.2'
    
    services:
      eclipse-theia:
        restart: always
        image: theiaide/theia:latest
        init: true
        environment:
          - VIRTUAL_HOST=mysubdomain1.domain.com,mysubdomain2.domain.com
          - LETSENCRYPT_HOST=mysubdomain1.domain.com,mysubdomain2.domain.com
          - LETSENCRYPT_EMAIL=mymail@domain.com
    

    并且在 jwilder/nginx-proxy 容器中安装了 apt,因此只需执行 apt install nano 然后执行 nano /etc/nginx/conf.d/default.conf 并将第二个上游端口从 3000 编辑为 8080 就可以了!

    附:不要将端口 8080 添加到 nginx-proxy 配置中,这是完全没有必要的!

    【讨论】:

      猜你喜欢
      • 2020-05-03
      • 1970-01-01
      • 2017-03-19
      • 1970-01-01
      • 2015-09-25
      • 2018-04-29
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      相关资源
      最近更新 更多