SSH 连接 Docker 容器

前言

不想把项目部署在宿主机上以免把环境搞乱了,但是每次通过宿主机进入容器感觉有点繁琐。突发奇想,能不能 ssh 直接进入容器。说干就干,整个流程比较简单,但有几个地方容易踩坑,本篇博文记录一下整个流程。希望能帮助到大家,避免踩坑,浪费时间。

环境和部署流程

本文使用的宿主机系统和容器系统都是 Centos7

  • 创建容器

    1
    docker run -itd -p 40022:22 --name test --restart always --privileged=true centos:7 /usr/sbin/init

    其中 --privileged=true/usr/sbin/init 两个参数一定要写上,原因可以查看下面的参考资料 2,3 两点,下面也有解释;还有一点就是要开放公网端口。

    我在查看资料的时候,也有遇到博文说加了 --privileged=true 参数后为啥还是不能使用 systemctl 命令。这个的原因是因为 dbus-daemon 没能启动。其实 systemctl 并不是不可以使用。将你的 CMD 或者 entrypoint 设置为 /usr/sbin/init 即可。会自动将 dbus 等服务启动起来,然后就可以使用 systemctl 了。

  • 进入容器

    1
    docker exec -it test bash
  • 更新系统并安装 openssh

    1
    2
    yum update -y
    yum install -y openssh-server

    后面重启 sshd 服务会遇到一个问题 —— bash: service: command not found ,解决方法:安装 initscriptsyum install -y initscripts) ,详细查看参考资料第一点。

  • 修改 SSH 配置文件

    1
    vi /etc/ssh/sshd_config

    修改下面的参数(我这边采用的是密码登录,如果你想使用秘钥登录自己修改对应的配置信息)

    1
    2
    3
    Port 22
    PermitRootLogin yes
    PasswordAuthentication yes

    重启 sshd 服务

    1
    2
    3
    systemctl restart sshd
    或者
    service sshd restart
  • passwd 修改容器密码

    大功告成!

    容器 ssh 登录信息

    • ip :宿主机 ip
    • port :宿主机 port ,教程上的 40022 端口
    • password : 容器里修改的密码

当然后面还可以使用 docker commit 命令来创建镜像,方便后面使用,这边我就不一一介绍了。

参考资料

Powered by Hexo and Hexo-theme-hiker

Copyright © 2018 - 2023 Leamx's Blog All Rights Reserved.

UV : | PV :