我正在尝试构建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
但是我得到一个错误:
如果我在容器内手动运行此命令:
/etc/init.d/ssh restart
# or this
service ssh restart
然后我可以建立联系。我认为这意味着sshd重新启动无效。
我在
FROM java
中使用Dockerfile
。 最佳答案
构建过程仅构建镜像。那时运行的进程(使用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,您可能希望容器已在运行。
关于docker - docker容器不能使用 `service sshd restart`,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41544989/