簡體   English   中英

在docker-compose.yml中構建卷

[英]build with volumes in the docker-compose.yml

我想使用NGINX運行多個Web應用程序映像。

所以我寫了docker-compose.yml來構建nginx圖像並運行nodejs容器。

我有letencrypt頒發的SSL證書。

證書文件位於/etc/letsencrypt/live/mydomain.com/

我希望NGINX容器讀取文件。

因此,我將volumes: - /etc/letsencrypt/live/mydomain.com/:/etc/cert:ro附加volumes: - /etc/letsencrypt/live/mydomain.com/:/etc/cert:ro docker-compose.yml volumes: - /etc/letsencrypt/live/mydomain.com/:/etc/cert:ro docker-compose.yml volumes: - /etc/letsencrypt/live/mydomain.com/:/etc/cert:ro docker-compose.yml volumes: - /etc/letsencrypt/live/mydomain.com/:/etc/cert:rodocker-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"
   }
 ],
...

謝謝

問題是在構建操作完成后將裝入該卷。 這就是為什么這種方法對您不起作用的原因。

您需要做的是將這些資源復制到dockerfile容器內。

假設您沒有定義dockerfile。 您可以創建使nginx成為基本圖像的對象。

看起來有點像...

From nginx:latest

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

相似但在不同上下文中的他們在這里解釋

干杯!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM