4

我是 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 连接到该容器。

$码头工人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
4

3 回答 3

6

您的 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/

于 2013-09-02T13:30:03.187 回答
3

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

这可以通过使用类似supervisord或定位startup.sh脚本而不是apacheENTRYPOINT

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"]

启动.sh

#!/bin/bash

sshd

apache2 -D FOREGROUND
于 2013-12-14T23:56:23.307 回答
2

恕我直言,您正在寻找

docker attach 5765535796f8

码头工人命令

编辑:

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

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

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

于 2013-09-09T09:41:43.347 回答