Как подставить вывод команды в строку и добавить ее в файл (в Alpine Linux работает в Docker)

Я пытаюсь построить следующий Dockerfile:

FROM alpine:latest
EXPOSE 9050 9051
RUN apk --update add tor
RUN echo "ControlPort 9051" >> /etc/tor/torrc
RUN password_hash=$(tor --hash-password "foo")
RUN echo "HashedControlPassword $password_hash" >> /etc/tor/torrc
CMD ["tor"]

Я пытаюсь добавить строку HashedControllPassword [pw] в /etc/tor/torrc, где [pw] генерируется командой tor --hash-password "foo", (Я использую "Foo" в качестве пароля в этом примере).

Если я создаю изображение с помощью docker build --tag my_tor . и введите командную строку, используя

docker run -it my_tor /bin/ash

и беги cat /etc/tor/torrc, Я вижу

ControlPort 9051
HashedControlPassword 

Другими словами, в конце концов torrc похоже, не содержит хешированный пароль. Однако подобные команды в моем терминале Ubuntu работают. Кто-нибудь может определить, в чем проблема?

1 ответ

Решение

Вы можете использовать ARG

FROM alpine:latest
EXPOSE 9050 9051
ARG password
RUN apk --update add tor
RUN echo "ControlPort 9051" >> /etc/tor/torrc
RUN echo "HashedControlPassword $(tor --hash-password $password)" >> /etc/tor/torrc
CMD ["tor"]

А затем построить с помощью:

docker build --build-arg password=foo Dockerfile

Вообще я бы не испек пароль в изображении. Было бы лучше предоставить эти вещи, когда вы запускаете контейнер с помощью -e,

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