©
本文档使用 PHP中文网手册 发布
eg_sshd
图像下面Dockerfile
在容器中设置一个SSHd服务,您可以使用该服务来连接并检查其他容器的卷,或者快速访问测试容器。
FROM ubuntu:16.04RUN apt-get update && apt-get install -y openssh-server RUN mkdir /var/run/sshd RUN echo 'root:screencast' | chpasswd RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config # SSH login fix. Otherwise user is kicked off after login RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd ENV NOTVISIBLE "in users profile"RUN echo "export VISIBLE=now" >> /etc/profile EXPOSE 22CMD ["/usr/sbin/sshd", "-D"]
使用以下命令构建图像
$ docker build -t eg_sshd .
test_sshd
容器然后运行它。然后,您可以使用它docker port
来找出容器的端口22映射到的主机端口:
$ docker run -d -P --name test_sshd eg_sshd $ docker port test_sshd 220.0.0.0:49154
现在你可以root
在容器的IP地址(你可以找到它docker inspect
)或者49154
Docker守护进程的主机IP地址的端口上(ip address
或者ifconfig
可以告诉你)或者localhost
在Docker守护进程主机上ssh:
$ ssh root@192.168.1.2 -p 49154# The password is ``screencast``.root@f38c87f2a42d:/#
使用sshd
守护进程来生成shell会使得通过普通的Docker机制将环境变量传递到用户的shell变得很复杂,因为sshd
它会在启动shell之前清理环境。
如果你的在设定值Dockerfile
使用ENV
,你需要将它们推到像一个shell初始化文件/etc/profile
中的例子Dockerfile
以上。
如果您需要传递docker run -e ENV=value
值,则需要在开始之前编写一个简短的脚本来完成相同的操作sshd -D
,然后CMD
用该脚本替换。
最后,通过停止并取出容器,然后移除图像,在测试后清理。
$ docker stop test_sshd $ docker rm test_sshd $ docker rmi eg_sshd