Docker容器内添加ssh开机自启动


问题

Dockerfile中创建容器,通常需要进入容器后手动安装ssh相关包,然后开启ssh服务。并且当容器重启后,ssh服务并不会随着重启,仍然需要手动开启。本文尝试使用Dockerfile修改容器内配置文件实现ssh自启动服务。


一、配置Dockerfile

首先需要安装ssh相关包,如第一个RUN所示

其次需要修改sshd_config文件,允许Root账户ssh远程登陆,如第二个RUN所示

然后需要将编写好的start_ssh.sh文件拷贝到容器的/root目录下,并赋予可执行权限,如第一个COPY和第三个RUN所示

最后需要将start_ssh.sh脚本添加到启动文件中,如第四个RUN所示

FROM ubuntu:18.04
  
ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update && apt-get install -y dialog openssh-server ssh vim

RUN echo "root:123456" | chpasswd  \
&& sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config \
&& sed -i 's/^#\(PermitRootLogin.*\)/\1/' /etc/ssh/sshd_config

RUN /etc/init.d/ssh start

# RUN mkdir /var/run/sshd

EXPOSE 22

COPY ./test/start_ssh.sh /root/start_ssh.sh
RUN chmod +x /root/start_ssh.sh

RUN sed -i '$a\if [ -f /root/start_ssh.sh ]; then ' /root/.bashrc \
&& sed -i '$a\     . /root/start_ssh.sh' /root/.bashrc \
&& sed -i '$a\fi' /root/.bashrc


二、start_ssh.sh脚本

在root目录下创建一个start_ssh.sh文件

touch /root/start_ssh.sh
 
vim /root/start_ssh.sh

start_ssh.sh的内容如下:

#!/bin/bash
 
LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")
echo "[$LOGTIME] startup run..." >>/root/start_ssh.log
service ssh start >>/root/start_ssh.log
#service mysql start >>/root/star_mysql.log   //其他服务也可这么实现

三、创建容器

经过上述两部的配置,一个能够ssh自启动的容器镜像已经制作完成了,可以使用如下命令创建容器:

sudo docker build -t ssh_test .
sudo docker run -it -p3002:22 --name test ssh_test /bin/bash

也可以利用docker-conpose.yml实现一键启动:

vim docker-compose.yml

文件内容如下:

version: '2'
services:
  ssh_test:
    image: ssh_test:latest
    ports:
       - "3002:22"
    stdin_open: true # docker run -i
    tty: true       # docker run -t
    command: /bin/bash

总结

注意start_ssh.sh脚本COPY的位置

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Docker中,可以使用不同的方法来实现容器SSH开机启动。以下是一种常见的方法: 1. 创建一个新的容器映像:首先,您需要在Dockerfile中定义一个自定义镜像。在Dockerfile中,使用RUN命令安装SSH服务器。您可以选择使用任何您熟悉和喜欢的SSH服务器,如OpenSSH Server。例如,可以使用以下命令在Ubuntu镜像中安装OpenSSH服务器: ``` FROM ubuntu RUN apt-get update && apt-get install -y openssh-server ``` 2. 配置SSH服务器:在Dockerfile中,使用RUN和COPY命令进行容器SSH服务器配置。对于OpenSSH服务器,您可以复制您自己的SSHD配置文件(sshd_config)到容器中。使用COPY命令将配置文件复制到适当的位置。例如: ``` COPY sshd_config /etc/ssh/sshd_config ``` 然后,使用RUN命令更改权限和所有者: ``` RUN chmod 600 /etc/ssh/sshd_config && chown root:root /etc/ssh/sshd_config ``` 3. 启动SSH服务器:在Dockerfile中,使用CMD或ENTRYPOINT命令启动SSH服务器。使用CMD时,可以将启动命令添加Dockerfile的末尾。例如,可以使用以下命令启动OpenSSH服务器: ``` CMD ["/usr/sbin/sshd", "-D"] ``` 这将使用默认配置文件来启动SSH服务器。 4. 构建镜像和运行容器:使用docker build命令构建镜像,并使用docker run命令来运行容器。您可以在docker run命令中指定SSH服务器的端口映射(如 `-p host_port:container_port`)和其他选项。例如: ``` docker build -t mysshimage . docker run -d -p 2222:22 --name mysshcontainer mysshimage ``` 此操作将构建名为mysshimage的镜像,并使用2222端口映射到容器的22端口。容器将在后台以mysshcontainer的名称运行。 这样,当您启动该容器时,您可以使用SSH工具连接到该容器的IP地址和指定的端口(例如,localhost:2222)。您可以使用之前设置的用户名和密码进行身份验证,以便远程访问该容器。 请注意,这只是一种实现方式,还有其他方法也可以实现Docker容器SSH开机启动。具体实现取决于您对DockerSSH服务器的个人偏好和要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZywOo777

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值