【问题标题】:Can't enable ssl by docker-letsencrypt-nginx-proxy-companion无法通过 docker-letsencrypt-nginx-proxy-companion 启用 ssl
【发布时间】:2020-04-14 14:32:03
【问题描述】:

我想通过docker-letsencrypt-nginx-proxy-companion 启用 ssl。 这是 docker-compose.yml

version: "3.3"
services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - certs:/etc/nginx/certs:ro
      - vhostd:/etc/nginx/vhost.d 
      - html:/usr/share/nginx/html 
      - /var/run/docker.sock:/tmp/docker.sock:ro  
    restart: always
  db:
    # ---
  wordpress:
    # ---
    environment:
      # ---
      VIRTUAL_HOST: blog.ironsand.net
      LETSENCRYPT_HOST: blog.ironsand.net
      LETSENCRYPT_EMAIL: mymail@example.com
    restart: always
  letsencrypt-nginx-proxy-companion: 
    container_name: letsencrypt
    image: jrcs/letsencrypt-nginx-proxy-companion 
    volumes: 
      - certs:/etc/nginx/certs 
      - vhostd:/etc/nginx/vhost.d 
      - html:/usr/share/nginx/html 
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      NGINX_PROXY_CONTAINER: nginx-proxy
    restart: always
networks:
  default:
    external:
      name: nginx-proxy
volumes:
  certs:
  vhostd:
  html:

docker logs letsencrypt 表明证书已经存在。

/etc/nginx/certs/blog.ironsand.net /app
Creating/renewal blog.ironsand.net certificates... (blog.ironsand.net)
2020-04-09 00:03:23,711:INFO:simp_le:1581: Certificates already exist and renewal is not necessary, exiting with status code 1.
/app

但是 ACME 挑战没有任何回报。 (失败?)

$ docker exec letsencrypt bash -c 'echo "Hello world!" > /usr/share/nginx/html/.well-known/acme-challenge/hello-world'
$

443端口正在listing,但端口被外部关闭。

// in remote server
$ sudo lsof -i:443
[sudo] password for ubuntu:
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
docker-pr 10910 root    4u  IPv6 633694      0t0  TCP *:https (LISTEN)

// from local pc
❯ nmap -p 443 blog.ironsand.net
Starting Nmap 7.80 ( https://nmap.org ) at 2020-04-09 09:44 JST
Nmap scan report for blog.ironsand.net (153.127.40.107)
Host is up (0.035s latency).
rDNS record for 153.127.40.107: ik1-418-41103.vs.sakura.ne.jp

PORT    STATE  SERVICE
443/tcp closed https

Nmap done: 1 IP address (1 host up) scanned in 0.21 seconds

我正在使用包过滤,但它对 80 和 443 开放,而且我没有使用防火墙。 如何进一步调查存在问题的地方?

【问题讨论】:

    标签: docker nginx lets-encrypt


    【解决方案1】:

    我不能直接解决你的问题,但是我可以写一些提示,所以可以解决你的问题。

    1. 你的命令什么都不返回。
      bash -c 'echo "Hello world!" > /usr/share/nginx/html/.well-known/acme-challenge/hello-world'
      这个命令只写“Hello world!”到该位置,通常什么都不返回。见https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Redirections

    2. 查看 certs 文件夹的内部。
      查看 certs 文件夹,也许可以清理它们。检查该文件夹是否正确安装在您的 nginx 容器中。 bash 进入容器并检查 ssl 文件夹。

    3. 检查防火墙是否发生故障
      从外面可能没有联系?什么是由内而外的?登录您的 docker-host 并从那里检查连接(也许 opensslcurl 是您的朋友),

    4. 不要在容器内使用 SSL。
      当 sombody 尝试将 ssl 与 ACME 图像和“野生挂载和共享卷”一起使用时,我经常会看到问题。但是我从来没有听说过问题,当同一个人使用普通的反向代理时。我在下面解释了一个很好的设置。

    所以只需从容器中删除整个letscrypt-code并关闭容器的443端口。
    (此外,您可以切换到非根映像并仅公开不需要根权限的端口。) 然后在你的主机上安装 nginx 并设置一个反向代理(类似于proxy_pass 127.0.0.1:8080)。现在安装certbot 并启动它。它对您有帮助,而且很直接。
    certbot 还可以维护您的证书。

    【讨论】:

    • 感谢您的回答。我尝试使用非 docker nginx 反向代理进行配置,但是当我更改 wordpress 容器的端口时它也失败了。等我习惯用docker系统再试试。
    • 为什么失败了?我能帮忙吗?
    • 我重新映射了 wordpress 容器“ports -8080:80”的端口,并使用 nginx 为其创建了代理通行证。然后我可以通过curl 下载 HTML 内容,但是当我尝试通过浏览器访问时出现“连接被拒绝”错误。 (我用谷歌搜索但无法修复错误。)当我创建一个全新的 wordpress 容器时,错误并没有发生。所以很可能问题的原因位于我的 wordpress 配置中。当我可以腾出时间时,我会尝试再次修复它。谢谢你的好意。
    • 是的,错误似乎与您的配置有关。也许docker logs <container_name> 可以帮助你。
    猜你喜欢
    • 2020-05-03
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多