Как подставить вывод команды в строку и добавить ее в файл (в 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
,