docker container不能使用`service sshd restart`

时间:2017-01-09 09:43:27

标签: docker ssh dockerfile sshd

我正在尝试构建一个hadoop Dockerfile

在构建过程中,我添加了:

  && 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

我假设当我运行这个容器时:

docker run -it --rm hadoop/tag bash

我能够:

ssh localhost

但我收到了一个错误:

  

ssh:连接到主机localhost端口22:拒绝连接

如果我在容器内手动运行:

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

然后我就可以联系了。我认为这意味着 sshd重启没有工作

我在FROM java中使用Dockerfile

1 个答案:

答案 0 :(得分:3)

构建过程仅构建图像。在此时运行的进程(使用RUN)在构建后不再运行,并且在使用映像启动容器时不会再次启动。

您需要做的是让sshd在容器运行时启动 。最简单的方法是使用入口点脚本。

<强> 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 "$@"

使用上面的内容重建图片,当您使用它来启动容器时,它应该在运行CMD之前启动sshd。

如果您愿意,也可以将开头的基本图像更改为Phusion baseimage。它可以很容易地启动一些服务,比如syslogd,sshd,你可能希望容器运行。