我不是 docker 专家,我只是在习惯它。我想将主机上生成的 ssl 证书复制到我的 docker 容器。我读到它应该能够与volumes
docker-compose 文件中的参数,但启动我的服务器时它总是令人兴奋,因为它无法在工作目录中找到复制的文件。
文件夹结构
- repo
- backend
- api
- static
- ssl
- dockerfile
- frontend
- docker-compose.yml
Dockerfile
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-Compose
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
你做的一切都是对的,问题出在文件上。如果您查看它们,您会发现它们不是普通文件,而是链接:
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
因此,您安装了一堆指向不存在位置的相对链接。
我建议你挂载/etc/letsencrypt
to /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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)