我是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
答案 0 :(得分: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/
答案 1 :(得分:3)
除了安装ssh之外,还需要运行sshd服务(你只运行apache)
这可以通过在supervisord
startup.sh
或定位apache
脚本而不是ENTRYPOINT
来完成
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
答案 2 :(得分:2)
恕我直言,你正在寻找
docker attach 5765535796f8
编辑:
docker attach 57
也应该有用。
EDIT2:
创建容器时,请确保为其命名,重新启动,设置环境变量和持久数据路径,公开所需的端口:
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;)