openssh-server doesn't start in Docker container

Deadly 提交于 2020-06-25 06:33:08

问题


I am having a weird problem.

I am not able to ssh to docker container having ip address 172.17.0.61.

I am getting following error:

$ ssh 172.17.0.61
ssh: connect to host 172.17.0.61 port 22: Connection refused

My Dockerfile does contain openssh-server installation step:

RUN apt-get -y install curl runit openssh-server

And also step to start ssh:

RUN service ssh start

What could be the issue?

When I enter into container using nsenter and start ssh service then I am able to ssh. But while creating container ssh-server doesn't seems to start.

What should I do?


回答1:


When building a Dockerfile you would create an image. But you can't create an image with an already running ssh daemon or any running service else. First if you create a running container out of the image you can start services inside. E.g. by appending the start instruction to the docker run command:

sudo docker run -d mysshserver service ssh start

You can define a default command for your docker image with CMD. Here is an example Dockerfile:

FROM ubuntu:14.04.1
MAINTAINER Thomas Steinbach
EXPOSE 22
RUN apt-get install -y openssh-server
CMD service ssh start && while true; do sleep 3000; done

You can build an run this image with the following two commands:

sudo docker build -t sshtest .
sudo docker run -d -P --name ssht sshtest

Now you can connect to this container via ssh. Note that in the example Dockerfile no user and no login was created. This image is just for example and you can start an ssh connection to it, but not login.




回答2:


In my opinion there is a better approach:

Dockerfile

FROM ubuntu:14.04.1
EXPOSE 22
COPY docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
RUN apt-get install -y openssh-server

ENTRYPOINT ["sh", "/docker-entrypoint.sh"]

# THIS PART WILL BE REPLACED IF YOU PASS SOME OTHER COMMAND TO docker RUN
CMD while true; do echo "default arg" && sleep 1; done

docker-entrypoint.sh

#!/bin/bash
service ssh restart
exec "$@"

Build command docker build -t sshtest .

The benefit of this approach is that your ssh daemon will always start when you use docker run, but you can also specify optional arguments e.g.:

docker run sshtest will print default arg every 1 second whether docker run sshtest sh -c 'while true; do echo "passed arg" && sleep 3; done' will print passed arg every 3 seconds



来源:https://stackoverflow.com/questions/27860506/openssh-server-doesnt-start-in-docker-container

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!