【问题标题】:Not able to connect to docker containers using SSH [closed]无法使用 SSH 连接到 docker 容器 [关闭]
【发布时间】:2013-09-05 03:08:33
【问题描述】:

我是 Docker 新手,我从 Dockerfile 构建了容器,我可以看到容器正在创建和运行,但我无法使用 ssh 连接到该容器。

这是我的 Dockerfile:

FROM ubuntu:12.04

RUN apt-get update
RUN apt-get install -y apache2 & openssh-server

ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2

EXPOSE 80
EXPOSE 22

ENTRYPOINT ["/usr/sbin/apache2"]
CMD ["-D", "FOREGROUND"]

然后我运行了这个 cmd:

docker build -t="apache2" .
$ docker run -d apache2

当我执行docker ps 时,我可以看到端口已分配,但我无法使用 ssh 连接到该容器。

$ docker ps

ID                  IMAGE               COMMAND                CREATED              STATUS              PORTS
5765535796f8        apache2:latest      /usr/sbin/apache2 -D   About a minute ago   Up About a minute   49154->80,49155->22

【问题讨论】:

    标签: linux ssh openssh docker lxc


    【解决方案1】:

    您的 docker 文件中似乎有错字。线路:

    RUN apt-get install -y apache2 & openssh-server

    应该是

    RUN apt-get install -y apache2 openssh-server

    如果您更改此设置并添加设置 root 密码的步骤,如“运行 ssh 服务指南”中所示,您是否能够 ssh 进入正在运行的容器?

    https://docs.docker.com/engine/examples/running_ssh_service/

    【讨论】:

    • 嘿,谢谢 johncosta 的回复,我需要澄清一下,当我们运行此命令“docker run -d apache2”时,我们不能连接到容器。
    • 您需要与 apache2 进程并行启动 openssh-server。 Docker 没有 init/supervisor,只启动你指定的进程。
    【解决方案2】:

    除了安装ssh,还需要运行sshd服务(你只运行apache)

    这可以通过使用类似supervisord 或在ENTRYPOINT 中定位startup.sh 脚本而不是apache 来完成

    Dockerfile

    FROM ubuntu:12.04
    
    RUN apt-get update
    RUN apt-get install -y apache2 openssh-server
    
    ENV APACHE_RUN_USER www-data
    ENV APACHE_RUN_GROUP www-data
    ENV APACHE_LOG_DIR /var/log/apache2
    
    EXPOSE 80
    EXPOSE 22
    ADD ./startup.sh /opt/startup.sh
    
    ENTRYPOINT ["/opt/startup.sh"]
    

    startup.sh

    #!/bin/bash
    
    sshd
    
    apache2 -D FOREGROUND
    

    【讨论】:

    • 谢谢。此解决方案允许我使用以下命令(嵌入在 docker 文件中执行的 bash 脚本中)启动 sshd 守护进程 - /usr/sbin/sshd -D &
    【解决方案3】:

    恕我直言,您正在寻找

    docker attach 5765535796f8

    Docker Commands

    编辑:

    docker attach 57 应该也可以。

    编辑2:

    创建容器时,请确保命名、重启、设置环境变量和持久数据的路径、公开所需的端口:

    docker run -d --restart=always --name=<my_container> -e TZ=<timezone> -e TERM=xterm -p <some_unused_port>:22 -v -p 80:80 -p 443:443 -v /path/to/persistent/data:/data maintainer/image_name
    

    之后你可以像这样访问容器:

    docker exec -it <my_container> /bin/bash
    

    re: 在容器中运行 ssh

    出于安全考虑,这不是一个好主意。

    letsencrypt 也非常方便 - 端口 443 ;)

    【讨论】:

    • 有理由 ssh 进入 docker 容器而不是附加到它。当然,您通常会在可能的情况下附加,但如果您正在排除 ssh 特定的问题,例如 ssh 代理转发......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 2021-03-05
    • 2018-08-11
    • 2015-05-01
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    相关资源
    最近更新 更多