将 letsencrypt 文件复制到 docker 容器

Copy letsencrypt files to docker container

我不是 docker 的专家,我只是在习惯它。我想将在主机上生成的 ssl 证书复制到我的 docker 容器中。我读到它应该能够处理 docker-compose 文件中的 volumes 参数,但是启动我的服务器时它总是很兴奋,因为它无法在工作目录中找到复制的文件。

文件夹结构

- repo
   - backend
      - api
         - static
            - ssl
         - dockerfile
   - frontend
   - docker-compose.yml

Docker文件

FROM node:14-alpine

ENV NODE_ENV=production SERVER_PORT_HTTP=80 SERVER_PORT_HTTPS=443

WORKDIR /usr/src/app

RUN npm install

COPY . .

EXPOSE ${SERVER_PORT_HTTP} ${SERVER_PORT_HTTPS}

CMD [ "npm", "run", "start" ]

Docker-撰写

version: "3"

services:
  api:
    build:
      context: ./backend/api
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /etc/letsencrypt/live/api.example.com:/static/ssl
    restart: unless-stopped

你做的一切都对,问题出在文件上。如果您查看它们,您会发现它们不是普通文件,而是 links:

root@fbe56bc38ad6:/# ls /etc/letsencrypt/live/example.com/ -l
total 4
-rw-r--r-- 1 root root 692 Jul 24  2020 README
lrwxrwxrwx 1 root root  44 Mar 22 00:03 cert.pem -> ../../archive/example.com/cert5.pem
lrwxrwxrwx 1 root root  45 Mar 22 00:03 chain.pem -> ../../archive/example.com/chain5.pem
lrwxrwxrwx 1 root root  49 Mar 22 00:03 fullchain.pem -> ../../archive/example.com/fullchain5.pem
lrwxrwxrwx 1 root root  47 Mar 22 00:03 privkey.pem -> ../../archive/example.com/privkey5.pem
lrwxrwxrwx 1 root root  42 Mar  1 12:57 example.com -> /etc/letsencrypt/live/example.com
lrwxrwxrwx 1 root root  33 Mar  1 12:57 ssl-dhparams.pem -> /etc/letsencrypt/ssl-dhparams.pem

所以你安装了一堆指向不存在位置的相关 link。

我建议您将 /etc/letsencrypt 挂载到容器中的 /etc/letsencrypt

    volumes:
      - /etc/letsencrypt:/etc/letsencrypt

然后让您的应用程序在 /etc/letsencrypt/live/example.com 中查找文件或在 /static/ssl 中创建另一个指向 /etc/letsencrypt/live/example.com:

的 link
ln -s /etc/letsencrypt/live/example.com /static/ssl