在docker-compose.yml中构建卷

时间:2018-08-25 08:40:40

标签: docker nginx docker-compose docker-volume

我想使用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"
   }
 ],
...

谢谢

1 个答案:

答案 0 :(得分:0)

问题是在构建操作完成后将挂载该卷。这就是为什么这种方法对您不起作用的原因。

您需要做的是将这些资源复制到dockerfile中的容器中。

假设您没有定义dockerfile。您可以将nginx设为基本图片。

看起来像什么...

From nginx:latest

COPY from/host/dir to/container/container/dir

相似但在不同上下文中,他们正在解释reference

干杯!