如何将命令输出replace为string并将其附加到文件(在Docker中运行的Alpine Linux中)

我正在尝试构build下面的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 .构build图像docker build --tag my_tor . 并使用input命令行

 docker run -it my_tor /bin/ash 

并运行cat /etc/tor/torrc ,我明白了

 ControlPort 9051 HashedControlPassword 

换句话说,最后torrc似乎并不包含散列的密码。 不过,在我的Ubuntuterminal中的类似的命令工作。 任何人都可以发现问题是什么?

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