【问题标题】:Reverse proxy nginx with Docker使用 Docker 反向代理 nginx
【发布时间】:2017-04-12 11:25:25
【问题描述】:

我有一个带有 Docker 容器的网站。 所以我使用 nginx 反向代理 docker with let's encrypt 我关注这个tutorial

但我的网站无法使用 https。

有我的 docker compose 文件:

services:
  nginx:
    image: pixelfordinner/nginx
    container_name: pixelcloud-nginx_proxy-nginx
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "./volumes/conf.d:/etc/nginx/conf.d:ro"
      - "./volumes/vhost.d:/etc/nginx/vhost.d:ro"
      - "./volumes/certs:/etc/nginx/certs:ro"
      - "/usr/share/nginx/html"
  nginx-proxy:
    image: jwilder/docker-gen
    container_name: nginx-proxy
    depends_on:
      - nginx
    volumes_from:
      - nginx
    volumes:
      - "/var/run/docker.sock:/tmp/docker.sock:ro"
      - "./data/templates:/etc/docker-gen/templates:ro"
      - "./volumes/conf.d:/etc/nginx/conf.d:rw"
    entrypoint: /usr/local/bin/docker-gen -notify-sighup pixelcloud-nginx_proxy-nginx -watch -wait 5s:30s /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf
  letsencrypt-nginx-proxy:
    restart: always
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: ssl
    depends_on:
      - nginx
      - nginx-proxy
    volumes_from:
      - nginx
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "./volumes/vhost.d:/etc/nginx/vhost.d:rw"
      - "./volumes/certs:/etc/nginx/certs:rw"
    environment:
      - "NGINX_DOCKER_GEN_CONTAINER=pixelcloud-nginx_proxy-docker_gen"
   wordpress:
     image: wordpress
     environment:
      - VIRTUAL_HOST=foo.example.com 
      - LETSENCRYPT_HOST=foo.example.com
      - LETSENCRYPT_EMAIL= mail@example.com

我从github下载了nginx.tmpl文件,复制到/data/templates/nginx.tmpl

我不明白它不起作用

感谢您的帮助!

更新:我设法在 wordpress 上设置了 https 而不是 http。 但是我有一个带有 docker compose 的 Gitlab 实例。在登录页面上,https正在工作,但是当我登录并进入项目主页时,有https但连接不安全。 我想要这个:https://gitlab.exemple.com

【问题讨论】:

  • 你能解释一下什么不起作用吗?你得到连接被拒绝?它是带有 500 错误的白页吗?是别的吗?
  • 使用 https,我有 err_connection_reset 错误,使用 http,我有 502 bad gateway error
  • 如果不加密容器,foo.example.com 可以正常工作,我可以在我的网站上冲浪
  • 你能发布你的 nginx 配置吗?
  • 另外,作为旁注:Traefik 非常擅长为您自动化这些东西。看看:)

标签: nginx docker docker-compose lets-encrypt


【解决方案1】:

您似乎缺少jrcs/letsencrypt-nginx-proxy-companion 所需的jwilder/docker-gen 容器。

查看文档:https://github.com/JrCs/docker-letsencrypt-nginx-proxy-companion#separate-containers-recommended-method

查看示例:https://github.com/fatk/docker-letsencrypt-nginx-proxy-companion-examples/blob/master/docker-compose/v2/simple-site/docker-compose.yml

这意味着您必须添加一个nginx.tmpl 文件并将其挂载到您的jwilder/docker-gen 容器中。 您还需要从nginx-proxy 容器共享/etc/nginx/vhost.d 卷。

更新: 运行docker-gen 图像的服务的container_name 应该是pixelcloud-nginx_proxy-docker_gen,因为它需要匹配NGINX_DOCKER_GEN_CONTAINER 环境变量。所以你应该有:

  nginx-proxy:
    image: jwilder/docker-gen
    container_name: pixelcloud-nginx_proxy-docker_gen

【讨论】:

  • 是的,我忘记了 nginx.tmpl 文件。
  • 但即使是这个文件,并按照 fatk docker compose 文件,它仍然无法正常工作。 (我删除网络)。
  • @Vana 请使用更新后的 docker-compose 文件更新您的问题。日志 (docker-compose logs) 也很有用。
  • 我更新了我的第一篇文章并按照这个教程github.com/pixelfordinner/pixelcloud-docker-apps
  • @Vana 查看我的答案更新。请进行此更改,并让我知道它是如何进行的。您是否还从 pixelcloud-docker-apps git 存储库复制了卷? github.com/pixelfordinner/pixelcloud-docker-apps/tree/master/…
猜你喜欢
  • 2016-07-22
  • 2021-11-13
  • 2020-09-10
  • 2018-05-31
  • 2018-10-10
  • 2021-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多