Alpine容器安装运行ssh
写在前面
本文介绍了在Alpine容器(docker)上安装运行ssh并保证外界(宿主机)能通过ssh登录的方法,给出了相应的命令。在下在探索过程中借鉴了许多前人的经验,在此先行谢过,所有参考内容都会给出链接。
正文
前言
本文所述的Alpine容器不限于通过 docker pull alpine:tag 拉取的镜像建立的容器,而是泛指运行着Alpine操作系统的容器。
可以通过在容器内运行 cat /etc/issue 指令查看容器所运行的OS。注意,即便在容器内运行 cat /process/version 或 uname -a ,得到的仍然是宿主机的OS,参考文档[1]。
过程
step1: pull & run Alpine container
没什么好说的,需要注意的是在run的时候添加端口映射 -v xxxx:yyyy ,其中, xxxx 不建议为22,因为宿主机的ssh很可能已占用了该端口; yyyy 建议为22,因为这是传统习惯,当然,也可以是其它数字。
step2: install
使用 apk add --no-cache openssh-server 安装。参考文档[2]。
step3: set
首先 vi /etc/ssh/sshd_config 打开配置文件,然后,1)找到 # port 22 ,去掉 # ,同时,如果您在step1中将22设置为别的数字,这里也要将22改成那个数字;2)[可选] 视情况修改 #PermitRootLogin prohibit-password 一句,具体可参考文档[3]。3)保存,退出。该步骤还参考了文档[2][4]。
step4: start
通过 /etc/init.d/sshd start 启动。如果报错 bash: /etc/init.d/sshd: /sbin/openrc-run: bad interpreter: No such file or directory ,请先依次执行 apk add --no-cache openrc 和 rc-update add sshd 。参考文档[2][5]。
step5: test & debug
在宿主机上使用 ssh container-ip 测试是否能通,其中 container-ip 可以通过在宿主机上执行 docker inspect container-id | grep IPAddress 得到。如果报错,请依次执行下面的命令。参考文档[6]。
1 ssh-keygen -A
2 rc-status
3 touch /run/openrc/softlevel
4 /etc/init.d/sshd restart
在下没有详细研究这些命令的含义,有兴趣的读者请自行学习。
step6: test & debug again
再次测试,这次可能得到下图所示报错。

解决方法:运行图中建议的命令 ssh-keygen -f "/root/.ssh/known_hosts" -R "container-ip" ,亲测 ssh-keygen -R "container-ip" 也可以。
这次,不出意外,可以得到类似下面的输出,表明可以了。接下来可以配置ssh免密登录,但这不在本文介绍范围之内,请读者自行学习。

写在后面
本文是在下的实践记录。由于个体差异,不保证百分百解决您的问题,但希望能给您提供一些参考和思路。再次由衷感谢所有链接的作者。在下才疏学浅,错误疏漏之处在所难免,恳请广大读者批评指正,您的批评是在下前进的不竭动力。
参考
[1] 如何查看docker容器里的操作系统_ksj367043706的博客-CSDN博客
[3] sshd_config 中 PermitRootLogin 的探讨_huigher的专栏-CSDN博客
[4] ssh配置文件详解 - 简书
[5] linux - Running OpenSSH in an Alpine Docker Container - Stack Overflow
[6] Unable to SSH into Docker container running Alpine Linux 3.10 - Stack Overflow
Alpine容器安装运行ssh的更多相关文章
- Alpine容器中运行go的二进制文件
Alpine容器中运行go的二进制文件 kuSorZ · 3月之前 · 214 次点击 · 预计阅读时间 1 分钟 · 2分钟之前 开始浏览 原文出处:https://cloud.tencent.co ...
- Centos7基于容器安装运行Docker私有仓库及添加认证
一.前言 官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去.但是,有时候,我们的使用场景需要我们拥有一个私有的镜像仓库用于管理 ...
- Docker实践 - 安装Docker并在容器里运行tomcat
安装Docker yum install docker 本文使用的系统是centos7,ubuntu使用以下命令 sudo apt-get update sudo apt-get install do ...
- Windows10下的docker安装与入门 (二)使用docker引擎在容器中运行镜像
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...
- Windows10下的docker安装与入门 (三) 创建自己的docker镜像并且在容器中运行它
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...
- 为Docker容器中运行的gitlab添加ssh的一些问题记录
最近做的一个东西,是将gitlab10.x的汉化版本,从源码编译(在源码中自己定制一些东西),然后制作成Docker镜像,作为Docker容器来运行 在启用容器中的gitlab的ssh的时候,遇到了一 ...
- 【docker】【mysql】docker安装mysql,阿里云docker镜像加速器,docker搜索查看远程仓库上的镜像,docker拉取镜像,查看本地所有镜像,查看容器的运行状况,查看容器的详细信息
在docker上安装mysql有两种方式 1.通过Dockerfile构建 2.直接在docker hub上拉取镜像安装 =================本篇采用方法2=============== ...
- centos容器安装nginx及运行
进入centos容器: 安装依赖:yum insatll -y wget gcc gcc-c++ make openssl-devel 安装: 到官网复制下载链接:http://nginx.org/d ...
- 在容器中运行 Jenkins pipeline 任务
持续集成中的 pipeline 技术和 docker 都是当前正在发展的主流方向,当然把它们结合起来在 CI/CD 过程中发挥出更强大的威力也是大家共同的目标.本文将介绍如何在 Jenkins pip ...
随机推荐
- 2017年第二届广东省强网杯线上赛WEB:Musee de X writeup(模板注入漏洞)
目录 解题思路 总结 解题思路 拿到手上,有四个页面 首先按照题目要求执行,尝试注册一个名为admin的账户 这种情况,路径都给出来了,很可能就是目录遍历或者文件上传了 回到初始界面,点击链接here ...
- vue 移动端项目切换页面,页面置顶
之前项目是pc端是使用router的方式实现置顶的 //main.js router.afterEach((to, from, next) => { window.scrollTo(0, 0) ...
- ajax 中文参数乱码问题不一定是编码格式问题。
代码要修改用户的信息,写了三个ajax,第一个写完测试没有问题,后面俩逻辑一样的就直接复制粘贴了.到第二个ajax测试的时候发现中文会乱码 如下 $.ajax({//中文参数乱码 url: '/edi ...
- C#开发BIMFACE系列40 服务端API之模型集成
BIMFACE二次开发系列目录 [已更新最新开发文章,点击查看详细] 随着建筑信息化模型技术的发展,越来越多的人选择在云端浏览建筑模型.现阶段的云端模型浏览大多是基于文件级别,一次只可以浏览一 ...
- linux kill信号详解
大家对kill -9 肯定非常熟悉,在工作中也经常用到.特别是你去重启tomcat时.可是多半看来,我们对-9的理解只是表面而已. 很少有人(包括我)认真的去了解一下 kill -n 这个n到底是什么 ...
- 题解 GRE Words Revenge
题目传送门 题目大意 给出 \(m\) 次操作,分别为以下两种操作: 学习一个单词 给出一个段落,查询里面有多少个学过的单词.注意,如果学习过 \(\text{ab,bc}\) ,当前查询段落为 \( ...
- Redis 面试常见问题———缓存雪崩、缓存击穿以及缓存穿透
在开发中会面临缓存异常可能会出现三个问题,分别是缓存雪崩.缓存击穿和缓存穿透.这三个问题会导致大量请求从缓存转移到数据库,如果请求的并发量很大的话,就会导致数据库崩溃.所以在面试官也会经常问这些问题. ...
- 【Docker】(11)---Docker的网络概念
一.实现原理 1.实现原理 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为C ...
- AtCoder Beginner Contest 223
AtCoder Beginner Contest 223 A是纯纯的水题,就不说了 B - String Shifting 思路分析 我真的sb,一开始想了好久是不是和全排列有关,然后读了好几遍题目也 ...
- python streamlit 速成web页面,深度学习模型展示.
# 点我查看 参考文献 py中一个web应用,Streamlit 是一个开源 Python 库,可让您轻松创建和共享用于机器学习和数据科学的精美自定义 Web 应用程序.只需几分钟,您就可以构建和部 ...