unix - 在 docker 容器中安装 ssh

标签 unix docker dockerfile

我有一台托管 docker 容器的 ubuntu 机器。
在 docker 容器中,我正在运行一个必须验证的 Web 服务
用户的密码和 docker 主机的/etc/password。

我的观点是从 docker 容器通过 ssh 进入 docker 主机。
因此,当我在 docker 容器中运行命令 ssh 时,它说找不到 ssh。
所以,基本上 ssh 没有安装在容器中。
如何在容器中安装 ssh。
有什么办法可以实现这个场景吗?

最佳答案

好吧,作为图像文件的一部分,您只需安装 openssh-server:

sudo apt-get install openssh-server

那么问题是,传统上,一个正在运行的 docker 容器只会运行一个命令。您可以通过使用诸如 supervisord 之类的东西来解决这个问题。 docker 文档中有一个示例:https://docs.docker.com/engine/admin/using_supervisord/

您的 dockerfile 可能如下所示:
FROM ubuntu:16.04
MAINTAINER examples@docker.com

RUN apt-get update && apt-get install -y openssh-server apache2 supervisor
RUN mkdir -p /var/lock/apache2 /var/run/apache2 /var/run/sshd /var/log/supervisor

COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

EXPOSE 22 80
CMD ["/usr/bin/supervisord"]

您的 supervisord.conf 可能如下所示:
[supervisord]
nodaemon=true

[program:sshd]
command=/usr/sbin/sshd -D

[program:apache2]
command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND"

关于unix - 在 docker 容器中安装 ssh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40801417/

相关文章:

docker - 如果 docker 使用虚拟机在 mac 上运行那么它比 vagrant 有什么优势?

docker - docker 镜像中文件神秘丢失

docker - kairosdb服务未在容器中启动

linux - 让 VIM 在保存时添加最后一个新行

linux - 如果 `so`代表共享对象,那么 `a`代表什么?

docker - 容器内的docker pull图像因超时而失败

尝试挂载卷时出现 python kubernetes API 错误

mongodb - 使用 Docker 安装旧版本的 MongoDB

shell - FTP错误处理

用于字符串列表的 UNIX 脚本查找不在任何文件中的字符串