ato*_*ung 3 nginx docker docker-compose docker-volume
我想用 NGINX 运行多个 Web 应用程序图像。
所以我写了docker-compose.yml哪个构建 nginx 镜像并运行 nodejs 容器。
我有letsencrypt颁发的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
...
Run Code Online (Sandbox Code Playgroud)
配置文件
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;
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
错误
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)
Run Code Online (Sandbox Code Playgroud)
$docker 检查管理器
...
"Mounts": [
{
"Type": "bind",
"Source": "/etc/letsencrypt/live/luvber.kr",
"Destination": "/etc/cert",
"Mode": "ro",
"RW": false,
"Propagation": "rprivate"
}
],
...
Run Code Online (Sandbox Code Playgroud)
谢谢
小智 5
问题是卷将在构建操作完成后安装。这就是为什么这种方法对你不起作用。
您需要做的是将容器内的这些资源复制到dockerfile.
假设您没有定义 dockerfile。您可以创建您nginx的基本图像。
这看起来有点像......
From nginx:latest
COPY from/host/dir to/container/container/dir
Run Code Online (Sandbox Code Playgroud)
干杯!
| 归档时间: |
|
| 查看次数: |
3895 次 |
| 最近记录: |