Как добавить файл в том в образе Docker, используя значения из docker-compose.yml? - PullRequest
0 голосов
/ 30 октября 2019

У меня есть этот файл .env:

admin=admin
password=adminsPassword
stackName=integration-demo

, значения которого используются в файле docker-compose.yml, например:

    myService:
      build: 
        context: .
        dockerfile: myService.Dockerfile
        args:
          - instance=${stackName}.local
          - admin=${admin}
          - password=${password}
        volumes:
           - ./config:/config

Я хочу добавитьих в файл компоновки Docker, например:

FROM openjdk:8-jdk-alpine

ARG docker_properties_file=Username=$admin\nPassword=$password\nHost=$instance

RUN $docker_proprties_file >> config/gradle-docker.properties

, так что у меня есть файл gradle-docker.properties, который выглядит следующим образом:

username=admin
password=adminsPassword
host=integration.demo.local

в каталоге / config.

Однако файл gradle-docker.properties не записывается.

Как использовать переменную в файле docker-compose.yml для добавления данных в том?

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Обычный Docker и Docker Compose не имеют этой возможности. Вы можете создать файл вне Docker на хосте и смонтировать его в контейнер, как вы показываете, но ни у Docker, ни у Compose нет возможности шаблонизации, которая вам понадобится для этого.

Общий подход к вамВ описываемом вопросе строится настраиваемое изображение для каждого набора параметров конфигурации. На самом деле это не лучшая практика: представьте, что вам нужно перекомпилировать ls, потому что вы подключили USB-накопитель, на который вам нужно было посмотреть.

Одна вещь, которую вы можете сделать в простом Docker, - научить образ создавать собственную конфигурациюфайл во время запуска. Вы можете сделать это с помощью сценария, например:

#!/bin/sh
# I am docker-entrypoint.sh

# Create the config file
cat >config/gradle-docker.properties <<EOF
username=$USERNAME
et=$CETERA
EOF

# Run the main container process
exec "$@"

В вашем Dockerfile, COPY этот файл в образ и установить его как ENTRYPOINT;оставьте свой CMD без изменений. Вы должны использовать форму JSON-массива директивы ENTRYPOINT.

...
COPY docker-entrypoint.sh .
RUN chmod +x docker-entrypoint.sh
ENTRYPOINT ["./docker-entrypoint.sh"]
CMD ["java", "-jar", "application.jar"]

(В Kubernetes менеджер пакетов Helm имеет систему шаблонов, которая может создавать контент для ConfigMapобъект, который может быть введен в капсулу, но это значительное количество дополнительного оборудования.)

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

Один из способов достижения вашей цели - создать файл ${PWD}/config/grade-docker.properties на хосте, где ${PWD}/docker-compose.yml ... ${PWD} для ясности.

Ваше существующее свойство volumes затем сопоставит этот файл сконтейнер, когда он запущен, и поместите его в контейнер /config.

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