сборка docker --build-arg с командой оболочки в файле docker-compose - PullRequest
0 голосов
/ 04 марта 2019

Как я могу преобразовать эту команду ниже в версию docker-compose?

docker build -t xxx --build-arg SSH_PRV_KEY="$(cat ~/.ssh/id_rsa)" .

Я пробую этот блок ниже, но он не работает.Пожалуйста помоги.Спасибо.

xxx:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        SSH_PRV_KEY: "$(cat ~/.ssh/id_rsa)"

1 Ответ

0 голосов
/ 04 марта 2019

docker-compose не поддерживает такой код оболочки.Вы можете сделать это следующим образом:

xxx:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        SSH_PRV_KEY

Теперь, перед запуском docker-compose, экспортируйте вашу SSH_PRV_KEY env var:

export SSH_PRV_KEY="$(cat ~/.ssh/id_rsa)"
# now run docker-compose up as you normally do

Тогда SSH_PRV_KEY будет иметь правильное значение,

Две вещи, которые вам нужно учитывать:

  1. Это может работать не так, как ожидалось, если у вас есть пас-фаза в вашем id_rsa.
  2. This SSH_PRV_KEY будет фактически доступен метаданным докера, таким как docker history или images inspect.Чтобы обойти это, вы должны изучить многоэтапную сборку https://docs.docker.com/develop/develop-images/multistage-build/. На ваших этапах сборки вы используете этот ключ для выполнения чего угодно.Тогда на вашем последнем изображении не объявляйте SSH_PRV_KEY, а просто скопируйте результат с предыдущего изображения.Более конкретный пример, где вы используете закрытый ключ для установки зависимостей

    FROM based as build
    ARG SSH_PRV_KEY
    RUN echo "$SSH_PRV_KEY" > ~/.ssh/id_rsa
    RUN npm install # this may need access to that rsa key
    
    FROM node
    COPY --from=builder node_modules node_modules
    

Обратите внимание, что во вторых изображениях мы не объявляем ARG, поэтому мы не раскрываем его.

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