Docker容器内添加ssh开机自启动
文章目录问题一、配置Dockerfile二、start_ssh.sh脚本三、创建容器总结问题Dockerfile中创建容器,通常需要进入容器后手动安装ssh相关包,然后开启ssh服务。并且当容器重启后,ssh服务并不会随着重启,仍然需要手动开启。本文尝试使用Dockerfile修改容器内配置文件实现ssh自启动服务。一、配置Dockerfile首先需要安装ssh相关包,如第一个RUN所示其次需要修
·
问题
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的位置
更多推荐
已为社区贡献2条内容
所有评论(0)