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

标签 bash docker dockerfile alpine-linux

我正在尝试构建以下 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/

相关文章:

linux - 将 iptables 转换为 ip6tables

search - Docker 注册表 2.0 API v2

linux - 无法在 Azure 上的 Ubuntu 16.04 上连接 Percona Docker 镜像

docker - 如何在Windows docker上的jenkins中预安装插件?

docker - 为什么不建议将 DOCKERFILE 中的 ARG 用于传递 secret ?

linux - systemd 脚本 - 由 ExecStartPre 更新的环境文件

linux - 如何使用 shell 脚本读取其中包含一些文本字符串的二进制文件?

bash - 我如何在 org babel 中加载 bash(而不是 sh)以启用 #+BEGIN_SRC bash?

docker: 来自守护进程的错误响应:OCI 运行时创建失败:

Docker Compose 开发和生产环境最佳工作流程