сборка с томами в docker-compose.yml - PullRequest
0 голосов
/ 25 августа 2018

Я хочу запустить несколько изображений веб-приложений с NGINX.

Итак, я написал docker-compose.yml, который собирает образ nginx и запускает контейнеры nodejs.

У меня есть сертификат SSL, выданный letsencrypt.

Файлы сертификатов находятся в /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 для чтения внутри контейнеров.

докер-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)

Диспетчер проверки докеров

...
"Mounts": [
  {
    "Type": "bind",
    "Source": "/etc/letsencrypt/live/luvber.kr",
    "Destination": "/etc/cert",
    "Mode": "ro",
    "RW": false,
    "Propagation": "rprivate"
   }
 ],
...

Спасибо

1 Ответ

0 голосов
/ 25 августа 2018

Проблема заключается в том, что том будет подключен после завершения операций сборки. Вот почему этот подход не будет работать для вас.

Что вам нужно будет сделать, это скопировать эти ресурсы внутри контейнера в dockerfile.

Предполагается, что у вас нет определенного файла Docker. Вы можете создать свое изображение, сделав nginx своим базовым изображением.

Что бы выглядело примерно так ...

From nginx:latest

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

Нечто подобное, но в другом контексте они объясняют здесь

ура!

...