我想使用NGINX运行多个Web应用程序映像。
所以我写了docker-compose.yml
来构建nginx图像并运行nodejs容器。
我有letencrypt颁发的SSL证书。
证书文件位于/etc/letsencrypt/live/mydomain.com/
我希望NGINX容器读取文件。
因此,我将volumes: - /etc/letsencrypt/live/mydomain.com/:/etc/cert:ro
附加到docker-compose.yml
。
但是nginx.conf无法读取文件。
我发现目录/etc/cert
不存在,并且已作为绑定类型挂载。
我想知道如何在docker-compose.yml文件中设置卷以读取容器内部。
docker-compose.yml
version: '2.0'
services:
nginx:
container_name: manager
build: ./nginx
links:
- app-1:app-1
...
ports:
- 80:80
- 443:443
volumes:
- /etc/letsencrypt/live/mydomain.com/:/etc/cert:ro
depends_on:
- app-1
...
app-1:
container_name: audio-1
image: audio:test
ports:
- 80
...
nginx.conf
worker_processes 4;
events { worker_connections 1024; }
http {
upstream node-app {
least_conn;
server app-1:80 weight=10 max_fails=3 fail_timeout=60s;
...
}
server {
listen 80;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
ssl_certificate /etc/cert/fullchain.pem;
ssl_certificate_key /etc/cert/privkey.pem;
location / {
proxy_pass http://node-app;
...
}
}
}
错误
nginx: [emerg] BIO_new_file("/etc/cert/fullchain.pem") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/cert/fullchain.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file)
$ docker检查管理器
...
"Mounts": [
{
"Type": "bind",
"Source": "/etc/letsencrypt/live/luvber.kr",
"Destination": "/etc/cert",
"Mode": "ro",
"RW": false,
"Propagation": "rprivate"
}
],
...
谢谢
答案 0 :(得分:0)
问题是在构建操作完成后将挂载该卷。这就是为什么这种方法对您不起作用的原因。
您需要做的是将这些资源复制到dockerfile
中的容器中。
假设您没有定义dockerfile。您可以将nginx
设为基本图片。
看起来像什么...
From nginx:latest
COPY from/host/dir to/container/container/dir
相似但在不同上下文中,他们正在解释reference
干杯!