Docker-compose - установка переменных окружения, которые не являются литералами - PullRequest
3 голосов
/ 30 октября 2019

Я настроил Jenkins в контейнере Docker, и я пытаюсь получить доступ к моему личному репозиторию Bitbucket с этим сервером. Мне нужно скопировать мой SSH-ключ в этот контейнер, чтобы Bitbucket распознал его, и тогда мой сервер Jenkins мог получить доступ к репо.

В моем файле docker-compose.yml есть следующее:

services:
  jenkins:
    build: .
    volumes:
      - jenkins-data:/var/jenkins_home
    environment:
      - SSH_PRIVATE_KEY=$(cat ~/.ssh/id_rsa)
    ports:
      - "8080:8080"
      - "50000:50000"

volumes:
  jenkins-data:

Однако echo $SSH_PRIVATE_KEY дает /.ssh/id_rsa буквально вместо значения, хранящегося внутри. Я слышал, что проблема с этим внутри Dockerfile заключается в том, что он все еще может быть просмотрен в одном из слоев изображения, которое будет выдвигаться.

Мой вопрос: как я могу установить значение SSH_PRIVATE_KEY к значению содержимого моего файла?

Я считаю, что это может быть дубликатом Как установить переменную окружения в Docker-контейнер с помощью docker-compose , однако это решение не появляетсяизменить что-нибудь для меня.

Ответы [ 2 ]

3 голосов
/ 30 октября 2019

Вы можете создать переменную окружения в вашей оболочке, из которой вы запускаете компоновку:

export SSH_PRIVATE_KEY=$(cat ~/.ssh/id_rsa)

, а затем использовать ее в компоновке, например:

services:
  jenkins:
    build: .
    volumes:
      - jenkins-data:/var/jenkins_home
    environment:
      - SSH_PRIVATE_KEY
    ports:
      - "8080:8080"
      - "50000:50000"

. увеличьте значение переменной среды для контейнера из среды оболочки, как указано в документах :

Значение переменной в контейнере берется из значения для той же переменнойв оболочке, в которой запускается Compose.

1 голос
/ 30 октября 2019

Возможное решение:

    environment:
      - SSH_PRIVATE_KEY

и вызвать docker-compose следующим образом:

SSH_PRIVATE_KEY=$(cat ~/.ssh/id_rsa) docker-compose build

К сожалению, в настоящее время невозможно использовать многострочные переменные в .env.

Другая возможность:

services:
  jenkins:
    build: .
    volumes:
      - jenkins-data:/var/jenkins_home
      - "/home/user/.ssh/id_rsa:/home/user/.ssh/id_rsa:ro"      
    ports:
      - "8080:8080"
      - "50000:50000"

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