首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SSHd (Engine)

建一个eg_sshd图像

下面Dockerfile在容器中设置一个SSHd服务,您可以使用该服务来连接并检查其他容器的卷,或者快速访问测试容器。

FROM ubuntu:16.04

RUN 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 22
CMD ["/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 22

0.0.0.0:49154

现在你可以root在容器的IP地址(你可以找到它docker inspect)或者49154Docker守护进程的主机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

扫码关注腾讯云开发者

领取腾讯云代金券