如何将命令输出替换为字符串并将其附加到文件中(在Docker中运行的Alpine Linux中)

时间:2017-04-28 14:47:24

标签: bash docker dockerfile alpine

我正在尝试构建以下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 个答案:

答案 0 :(得分:2)

您可以使用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运行容器时提供这些内容会更好。