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

How to substitute a command output into a string and append that to a file (in Alpine Linux running in 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 终端中的类似命令确实有效。谁能找出问题所在?

您可以使用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.

运行 容器时最好提供这些东西