为什么不需要在 docker 运行容器容器中运行 sshd

docker容器里安装ssh的具体步骤
转载 & & 作者:lacker
本篇文章主要介绍了docker容器里安装ssh的具体步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
docker安装ssh
通过命令行安装
1.pull ubuntu镜像
docker pull ubuntu:latest
2.启动并进入bash
docker run -it -d ubuntu:lastest /bin/bash
# 查看刚刚运行容器的id
# 在容器中执行bash命令
docker exec -it id /bin/bash
3.安装openssh-server并启动
apt-get update
apt-get install openssh-server
# 启动之前需手动创建/var/run/sshd,不然启动sshd的时候会报错
mkdir -p /var/run/sshd
# sshd以守护进程运行
/usr/sbin/sshd -D &
# 安装netstat,查看sshd是否监听22端口
apt-get install net-tools
netstat -apn | grep ssh
如果已经监听22端口,说明sshd服务启动成功
# 生成ssh key
ssh-keygen -t rsa
# 修改sshd-config允许root登陆
sed -i 's+PermitRootLogin prohibit-password+PermitRootLogin yes' /etc/ssh/sshd-config
修改完sshd-config之后需要重启sshd服务
// 找到pid
ps -aux | grep ssh
kill -9 pid
/usr/sbin/sshd -D &
查看容器ip
在主机上进行登陆
ssh root@ip
就可以登录成功了,但是注意这里是docker容器的宿主机才能登陆成功,如果需要其他机器登陆,可以在启动docker的时候进行端口映射
// 11122宿主机端口,22为容器端口
docker run -it -p 11122:22
// 在其他机器上可以使用以下命令登陆,假设宿主机ip为192.168.1.101
ssh -p 11122 root@192.168.1.101
5.保存容器
// 把id为id的容器保存
docker commit id sshd:ubuntu
// 停止容器
docker stop id
通过dockerfile
# 以最新的Ubuntu镜像为模板
FROM ubuntu:latest
// 将本目录下的sources.list作为容器的一个文件
ADD sources.list /root/sources.list
// 使用阿里Ubuntu源,更新快
RUN cp /root/sources.list /etc/apt/sources.list.d/aliyun.list
RUN apt-get update
RUN apt-get install -y openssh-server
RUN apt-get install -y net-tools
RUN apt-get install -y vim
RUN mkdir -p /var/run/sshd
RUN mkdir -p mkdir/root/.ssh/
// 修改root密码,便于远程登录
RUN echo root:123456 | chpasswd
// 将key生成在指定文件内
RUN ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -P '' -N ''
// 配置ssh可以使用root登陆
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config
// 开放22端口
CMD /usr/sbin/sshd -D &
根据Dockerfile build镜像
docker build -t nginx:ubuntu .
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)2315人阅读
golang(11)
如题,我们使用docker pull elasticsearch 到本地并且安装完毕后,我们发现docker提供的服务确实能用,但我们需要将现有的docker容器添加其他服务该怎么办?又无法登陆到容器内部,ok下面就讲解怎么将现有容器添加ssh登陆。下面我们分两步骤讲解,首先我们需要一个原生ubuntu环境支持sshd登陆服务。然后再讲解其它容器的整合。1. 原生ubuntu环境支持sshd登陆服务创建Dockfile文件FROM
ubuntu:14.04
MAINTAINER yufu niu "https://github.com/e"
RUN apt-get update
RUN apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:root' |chpasswd
RUN sed -ri 's/^PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
["/usr/sbin/sshd", "-D"]然后,构建镜像:docker build -t e/ubuntu-sshd .然后,创建容器:docker run -d -p 222:22 e/ubuntu_sshd然后,登陆测试:,密码为rootssh root@127.0.0.1 -p 2222. ok下面让我们整合其他容器登陆服务。首先我们下载es的docker源码:git clone :docker-library/elasticsearch.git然后跳转到2.4版本目录:cd elasticsearch/2.4然后修改Dockefile如下:(修改部分我作了标红)FROM openjdk:8-jre
# grab gosu for easy step-down from root
ENV GOSU_VERSION 1.7
RUN set -x \
&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
&& export GNUPGHOME="$(mktemp -d)" \
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42FF88E364FDBF357DD4 \
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
&& rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \
&& chmod +x /usr/local/bin/gosu \
&& gosu nobody true
# https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-repositories.html
# https://packages.elasticsearch.org/GPG-KEY-elasticsearch
RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 46095ACCAD666CD88E42B4
ENV ELASTICSEARCH_VERSION 2.4.0
ENV ELASTICSEARCH_REPO_BASE http://packages.elasticsearch.org/elasticsearch/2.x/debian
RUN echo "deb $ELASTICSEARCH_REPO_BASE stable main" & /etc/apt/sources.list.d/elasticsearch.list
RUN set -x \
&& apt-get update \
&& apt-get install -y --no-install-recommends elasticsearch=$ELASTICSEARCH_VERSION \
&& rm -rf /var/lib/apt/lists/*
ENV PATH /usr/share/elasticsearch/bin:$PATH
WORKDIR /usr/share/elasticsearch
RUN set -ex \
&& for path in \
./config \
./config/scripts \
mkdir -p "$path"; \
chown -R elasticsearch:elasticsearch "$path"; \
COPY config ./config
VOLUME /usr/share/elasticsearch/data
COPY docker-entrypoint.sh /
RUN set -x \
&& apt-get update \
&& apt-get install -y openssh-server \
&& mkdir /var/run/sshd
RUN echo 'root:root' |chpasswd
RUN sed -ri 's/^PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["elasticsearch"]
修改docker-entrypoint.sh,即es入口文件:#!/bin/bash
#开启sshd登陆支持
service ssh start
# Add elasticsearch as command if needed
if [ "${1:0:1}" = '-' ]; then
set -- elasticsearch "$@"
# Drop root privileges if we are running elasticsearch
# allow the container to be started with `--user`
if [ "$1" = 'elasticsearch' -a "$(id -u)" = '0' ]; then
# Change the ownership of /usr/share/elasticsearch/data to elasticsearch
chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/data
set -- gosu elasticsearch "$@"
#exec gosu elasticsearch "$BASH_SOURCE" "$@"
# As argument is not related to elasticsearch,
# then assume that user wants to run his own process,
# for example a `bash` shell to explore this image
然后重新构建镜像:docker build -t e/elasticsearch-sshd .然后跑起容器:docker run -d -v "${PWD}/esdata":/usr/share/elasticsearch/data -p
-p 223:22 e/elasticsearch-sshd然后测试登陆即可:ssh root@127.0.0.1 -p 223此时,你既能享受es给你带来的便捷,又能随时进入容器内部查看各种运行指标。
enjoy it!!!
文章:10篇
阅读:16340
阅读:45772他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 docker 停止运行容器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信