我可以通过分配一些伪 TTY 以交互方式从 Dockerfile 构建 Docker 容器吗?

kor*_*oll 12 ssh expect ssh-keygen docker

我从下面的 Dockerfile 构建容器:

FROM ubuntu:14.04
...
RUN apt-get update && apt-get install -y vim
#RUN ssh-keygen -f /root/.ssh/id_rsa -N strongpass123$%^
RUN ssh-keygen -f /root/.ssh/id_rsa
...
Run Code Online (Sandbox Code Playgroud)

我很少这样做,但是在使用之前ssh-keygen和之后有很多命令。

我知道我可以从脚本开始docker exec -it thirsty_darwin sh script.sh,然后标记图像,然后使用容器(图像)链接,但这并不是我想要的清晰解决方案。

甚至最坏的情况是ssh-add ~/.ssh/id_rsa当我必须使用 expect 工具时。Expect 工具对我的密码进行了硬编码。我不想做这件事。

Mat*_*ath 17

通常,您不应在 Docker 映像中包含任何机密。有关此主题的更多信息,请参阅此答案

如本期所述, Docker 不支持交互式构建是有充分理由的

如果你真的需要这样做,你可以docker commit像这样使用:

docker build -t thirsty_darwin_base /path/to/Dockerfile
docker run -it --name=thirsty_darwin_changes thirsty_darwin_base /bin/bash
# do interactive stuff in the shell, then exit
docker commit thirsty_darwin_changes thirsty_darwin
Run Code Online (Sandbox Code Playgroud)

现在thirsty_darwin有您的交互式更改。

更新:自从撰写此答案以来,Docker 发布了更全面的机密管理