SSL-сертификаты или другие файлы, не отображаемые в файловой структуре Docker

У меня есть сборка Docker для Gitlab, я создал несколько ssl-сертификатов и другие файлы, которые мне нужно вытащить. Однако когда я выполняю exe в контейнере bash, файлы не видны.

gitlab:
  image: 'gitlab/gitlab-ce:9.1.0-ce.0'
  restart: always
  hostname: 'gitlab.example.com'
  links:
    - postgresql:postgresql
    - redis:redis
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      postgresql['enable'] = false
      gitlab_rails['db_username'] = "gitlab"
      gitlab_rails['db_password'] = "gitlab"
      gitlab_rails['db_host'] = "postgresql"
      gitlab_rails['db_port'] = "5432"
      gitlab_rails['db_database'] = "gitlabhq_production"
      gitlab_rails['db_adapter'] = 'postgresql'
      gitlab_rails['db_encoding'] = 'utf8'
      redis['enable'] = false
      gitlab_rails['redis_host'] = 'redis'
      gitlab_rails['redis_port'] = '6379'
      external_url 'https://gitlab.example.com:30080'
      nginx['ssl_certificate'] = '/etc/gitlab/trusted-certs/gitlab.example.com.crt'
      nginx['ssl_certificate_key'] = '/etc/gitlab/trusted-certs/gitlab.example.com.key'
  ports:
    - "30080:30080"
    - "30022:22"
postgresql:
  restart: always
  image: postgres:9.6.2-alpine
  environment:
    - POSTGRES_USER=gitlab
    - POSTGRES_PASSWORD=gitlab
    - POSTGRES_DB=gitlabhq_production
redis:
  restart: always
  image: redis:3.0.7-alpine

2 ответа

Решение

При создании самозаверяющих сертификатов мне нужно выполнить exec в моем контейнере Docker и создать их с помощью Docker Bash

Сертификаты (самоподписанные) находятся на моей машине по пути, указанному в "/etc/gitlab/trusted-certs/gitlab.example.com.crt"

Ваш docker-compose.yml не отображал никаких папок с вашего хоста в ваш контейнер. Контейнеры являются не чем иным, как пространством имен, и одним из этих пространств имен является файловая система. Чтобы отобразить каталог с хоста в контейнер, вы можете использовать простой синтаксис bind mount:

gitlab:
  image: 'gitlab/gitlab-ce:9.1.0-ce.0'
  restart: always
  hostname: 'gitlab.example.com'
  volumes:
    - ./path/to/gitlab.example.com.crt:/etc/gitlab/trusted-certs/gitlab.example.com.crt:ro
  ...

Обратите внимание, что это монтируется с хоста в контейнер, и файл будет настроен как доступный только для чтения с :ro синтаксис для предотвращения изменения сертификатов процессами внутри контейнера. Если ваш хост докера находится внутри виртуальной машины (включая докер для Windows / Mac) или на удаленном сервере, вам нужно убедиться, что файлы там доступны (например, докер для Win / Mac имеет настройки для совместного использования папок ПК в встроенная ВМ).

Другие вопросы по тегам