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
будет иметь правильное значение,
Две вещи, которые вам нужно учитывать:
- Это может работать не так, как ожидалось, если у вас есть пас-фаза в вашем
id_rsa
. 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
, поэтому мы не раскрываем его.