我正在尝试构建以下 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
运行容器时提供这些内容。
关于bash - 如何将命令输出替换为字符串并将其附加到文件(在 Docker 中运行的 Alpine Linux 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43683002/