如何实现docker集装箱内外的交互

例如,当我build立一个基于debian的docker镜像时,我想安装ssh服务,然后在一个Dockerfile上设置ssh用户和密码。 如果我在运行之后不想这样做,虽然它可能是合理的。 谢谢你的帮助!

... RUN \ apt-get update && \ # install ssh service apt-get install openssh-server -y && \ mkdir -p /var/run/sshd && \ useradd sshuser && \ passwd sshuser && \ CMD ["/usr/sbin/sshd", "-D", "&"] ... 

把你的docker文件改成这个来做你原来想做的事情。

 ... RUN \ apt-get update && \ # install ssh service apt-get install openssh-server -y && \ mkdir -p /var/run/sshd RUN useradd sshuser -m -p $(openssl passwd $PASS) CMD ["/usr/sbin/sshd", "-D", "&"] ... 

虽然请注意,这意味着您生成的密码将永久编码在您的泊坞窗文件中,并且任何查看它的人都可以看到。 你可以给一个encryption的SHA而不是明文密码,但这仍然不是一个好主意。

请参阅man useradd了解更多信息。


作为一个build议,抛开docker世界的一个更好的方法是不要在容器中安装sshd 。 而是使用:

 $ docker exec -i -t <name of the running container> -- /bin/bash 

这假设容器已经在运行。 Docker的exec不需要任何forms的用户名或密码来访问容器。