gpt4 book ai didi

docker容器无法使用 `service sshd restart`

转载 作者:行者123 更新时间:2023-12-01 19:12:10 30 4
gpt4 key购买 nike

我正在尝试构建一个 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: connect to host localhost port 22: Connection refused

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

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

然后我就可以连接了。我认为这意味着 sshd 重新启动不起作用。

我在 Dockerfile 中使用 FROM java

最佳答案

构建过程仅构建图像。当时运行的进程(使用 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容器无法使用 `service sshd restart`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41544989/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com