Настройте тома докера для совместного использования данных между хостом и контейнерами - PullRequest
0 голосов
/ 23 ноября 2018

Я застрял, пытаясь настроить тома Docker для обмена файлами между моим хостом и сделать возможным в моем контейнере использовать эти файлы.позвольте мне объяснить.

У меня есть приложение для работы с rails docker с puma в качестве веб-сервера, я хочу, чтобы puma могла просматривать и использовать файлы ssl .key и .crt, поэтому для этого проекта я тожеиспользуя docker-compose в «производственном режиме», но я не знаю, как заставить это работать.

Моя настройка такова:

  • Сервер Ubuntu 18.04 для производства имеет sslфайлы внутри /home/ubuntu/my_app_keys, контейнеры тоже на моем хосте.

/ home / ubuntu / docker-compose.yml

version: '3'

services:
  postgres:
    image: postgres:10.5
    environment: 
      POSTGRES_DB: my_app_production
    env_file:
      -~/production.env

  redis:
    image: redis:4.0.11

  web:
    image: my_app:latest
    command: bundle exec rails server -p 3000 -b 'ssl://127.0.0.1:3000?key=/home/ubuntu/my_app_keys/server.key&cert=/home/ubuntu/my_app_keys/server.crt' -e production
    ports:
      - '3000:3000'
    volumes:
      - /home/ubuntu/my_app_keys
    depends_on:
      - postgres
      - redis
    env_file:
      - ~/production.env
    restart: always

  sidekiq:
    image: my_app_sidekiq:latest
    command: bundle exec sidekiq -C config/sidekiq.yml
    depends_on:
      - postgres
      - redis
    env_file:
      - ~/production.env
    restart: always

так,как вы можете видеть: command: bundle exec rails server -p 3000 -b 'ssl://127.0.0.1:3000?key=/home/ubuntu/my_app_keys/server.key&cert=/home/ubuntu/my_app_keys/server.crt' ищет ssl-файлы в / home / ubuntu / my_app_keys, когда я выполняю docker-compose up puma не может найти ssl-файлы и выходит с помощью:

/usr/local/bundle/gems/puma-3.9.1/lib/puma/minissl.rb:180:in `key=': No such key file '/home/ubuntu/my_app_keys/server.key' (ArgumentError)

Я думаю, что этопоскольку key=/home/ubuntu/my_app_keys/server.key&cert=/home/ubuntu/my_app_keys/server.crt указывают в контексте контейнера, но у меня есть сертификат и ключ в контексте моего хоста

, поэтому я включаю в docker compose volume для привязки файлов:

volumes:
  - /home/ubuntu/my_app_keys

но без везения, та же ошибка.

В контексте контейнера мое приложение находится в каталоге /var/www/my_app, поэтому я тЧтобы указать абсолютный путь (по какой-то причине я предполагал, что это потому, что файлы ssl не находились в той же директории, где мое приложение не могло быть совместно использовано), поэтому я добавляю как compose-file docs скажем:

volumes:
  - /home/ubuntu/my_app_keys:/var/www/my_app

и изменение в файле компоновки:

command: bundle exec rails server -p 3000 -b 'ssl://127.0.0.1:3000?key=server.key&cert=server.crt' -e

при выполнении компоновки завершает работу моего веб-сервиса с ошибкой:

web | Could not locate Gemfile or .bundle/ directory

только так, чтоЗапущен веб-сервис (но нет файлов ssl):

volumes:
  - /home/ubuntu/my_app_keys

, поэтому я не знаю, что делать сейчас.любая помощь?

1 Ответ

0 голосов
/ 23 ноября 2018

Когда ваш YAML-файл Docker Compose сообщает:

volumes:
  - /home/ubuntu/my_app_keys

Это означает, что "make /home/ubuntu/my_app_keys в пространстве контейнера сохраняется после перезапуска контейнера; он будет начинаться пустым, если Dockerfile не сделал что-то особенное;он не связан с каким-либо конкретным содержимым хоста ".

Когда вы говорите:

volumes:
  - /home/ubuntu/my_app_keys:/var/www/my_app

Это означает, что" полностью замените содержимое /var/www/my_app в пространстве контейнера содержимым /home/ubuntu/my_app_keys на хосте ".(Имена путей в пространстве хоста и контейнера не обязательно должны быть одинаковыми.)

В качестве дополнительного вопроса, когда вы говорите:

rails server -b 'ssl://127.0.0.1:3000?...'

Это означает, «только слушайтевходящие соединения через порт 3000, инициированные из этого контейнера Docker; вообще не принимайте никаких соединений извне контейнера, будь то с того же физического хоста, других контейнеров или где-либо еще. "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...