我正在尝试构建一个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:连接到主机本地主机端口22:连接被拒绝
如果我在容器中手动运行此操作:
/etc/init.d/ssh restart
# or this
service ssh restart
那我就能联系上了。我认为这意味着sshd重启不起作用。
我在Dockerfile
中使用Dockerfile
。
发布于 2017-01-09 15:59:20
生成过程只生成图像。当时运行的进程(使用RUN
)不再在构建之后运行,并且在使用映像启动容器时不会再次启动。
您需要做的是让sshd在容器运行时启动。最简单的方法是使用入口点脚本。
文档:
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。
如果您愿意的话,您也可以将开始时的基本图像更改为类似于击打基象的内容。它使您可以轻松地启动一些服务,比如syAdd.1-d、sshd,您可能希望容器能够运行。
https://stackoverflow.com/questions/41544989
复制相似问题