我正在尝试构建一个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
。
答案 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,你可能希望容器运行。