authentication - Dockerfile 中的 Subversion 导出/结帐而不在屏幕上打印密码

标签 authentication svn docker dockerfile

我想编写一个 Dockerfile,它将一个目录从远程 Subversion 存储库导出到构建上下文中,以便我可以在后续命令中使用这些文件。存储库通过用户/密码身份验证进行保护。

该 Dockerfile 可能如下所示:

# base image
FROM ubuntu

# install subversion client
RUN apt-get -y update && apt-get install -y subversion

# export my repository
RUN svn export --username=myUserName --password=myPassword http://subversion.myserver.com/path/to/directory

# further commands, e.g. on container start run a file just downloaded from the repository
CMD ["/bin/bash", "path/to/file.sh"]

然而,这有一个缺点,就是在屏幕或任何指向标准输出的日志文件上打印我的用户名和密码,如 Step 2 : RUN svn export --username=myUserName --password=myPassword http://subversion.myserver.com/path/to/directory .就我而言,这是一个 Jenkins 构建日志,其他不应该看到凭据的人也可以访问它。

在输出中隐藏用户名和密码的回显的最简单方法是什么?

直到现在,我还没有找到任何方法来执行 RUN构建镜像时在 Dockerfile 中静默执行命令。密码是否可以从其他地方导入并预先附加到命令中,这样就不必再打印了?或者在 Subversion 中是否有任何可以在 Dockerfile 上下文中工作的无密码身份验证方法(在没有交互的情况下设置它们)?

Subversion 服务器在我的公司远程运行,而不是在我的本地机器或 Docker 主机上运行。据我所知,除了通过用户名/密码身份验证访问我的存储库之外,我无法访问它,因此将任何 key 文件以 root 身份复制到某些服务器文件夹可能很困难。

最佳答案

Dockerfile RUN 命令总是在构建 docker 镜像时执行和缓存,因此必须在构建时提供 svn 需要验证的变量。您可以在执行 docker run 时移动 svn export 调用以避免此类问题。为此,您可以创建一个 bash 脚本并将其声明为 docker 入口点并传递用户名和密码的环境变量。例子

# base image
FROM ubuntu

ENV REPOSITORY_URL http://subversion.myserver.com/path/to/directory

# install subversion client
RUN apt-get -y update && apt-get install -y subversion

# make it executable before you add it here otherwise docker will coplain
ADD docker-entrypoint.sh /enrypoint.sh

ENTRYPOINT /entrypoint.sh

docker-entrypoint.sh
#!/bin/bash

# maybe here some validation that variables $REPO_USER $REPO_PASSOWRD exists.


svn export --username="$REMOTE_USER" --password="$REMOTE_PASSWORD" "$REPOSITORY_URL"

# continue execution
path/to/file.sh

运行你的图像:
docker run -e REPO_USER=jane -e REPO_PASSWORD=secret your/image

或者您可以将变量放在一个文件中:

.svn-凭据
REPO_USER=jane
REPO_PASSWORD=secret

然后运行:
docker run --env-file .svn-credentials your/image

完成后删除 .svn-credentials 文件。

关于authentication - Dockerfile 中的 Subversion 导出/结帐而不在屏幕上打印密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31815200/

相关文章:

c# - ASP.NET Core 2.0 预览版 1 : How to set up Cookie Authentication with custom login path

svn - 如何使用 ant 删除 .svn 目录?

docker - 如何修复简单的HDFS HA群集中的 “HA is not enabled”错误

docker - 编辑正在运行的Docker容器

MySqlDataReader 在构建时给出错误

php - 安全登录表单,或者至少我希望如此

ios - 我如何阻止某人使用我们的应用程序?

svn - Bamboo 无法发布神器

visual-studio-2010 - 从 SVN\Visual Studio 中删除 Bugtracker 集成

mysql - 无法连接到 db docker 容器