将 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
我不是 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
:
ln -s /etc/letsencrypt/live/example.com /static/ssl