el contenedor Docker no puede usar `service sshd restart`

Estoy intentando build un file Dockerfile .

En el process de compilation, agregué:

  && apt install -y openssh-client \ && apt install -y openssh-server \ && ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa \ && cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys \ && chmod 0600 ~/.ssh/authorized_keys && sed -i '/\#AuthorizedKeysFile/ d' /etc/ssh/sshd_config \ && echo "AuthorizedKeysFile ~/.ssh/authorized_keys" >> /etc/ssh/sshd_config \ && /etc/init.d/ssh restart 

Supuse que cuando ejecuté este contenedor:

 docker run -it --rm hadoop/tag bash 

Sería capaz de:

 ssh localhost 

Pero tengo un error:

ssh: connect to host localhost port 22: connection rechazada

Si ejecuto esto manualmente dentro del contenedor:

 /etc/init.d/ssh restart # or this service ssh restart 

Entonces puedo conectarme. Estoy pensando que esto significa que el reinicio sshd no funcionó .

Estoy usando FROM java en Dockerfile .

El process de compilation solo crea una image. Los processs que se ejecutan en ese momento (utilizando RUN ) ya no se ejecutan después de la compilation y no se reinician cuando se lanza un contenedor con la image.

Lo que necesita hacer es get sshd para comenzar en el time de ejecución del contenedor . La forma más sencilla de hacerlo es usando un script de punto de input.

Dockerfile:

 COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] CMD ["whatever", "your", "command", "is"] 

entrypoint.sh:

 #!/bin/sh # Start the ssh server /etc/init.d/ssh restart # Execute the CMD exec "$@" 

Reconstruya la image usando lo anterior, y cuando la use para iniciar un contenedor, debería iniciar sshd antes de ejecutar su CMD .

También puede cambiar la image base desde la que comienza a algo como la image base de Phusion, si lo prefiere. Hace que sea fácil comenzar algunos services como syslogd, sshd, que puede desear que el contenedor tenga en ejecución.