发布
社区首页 >问答首页 >码头集装箱不能使用“服务sshd重新启动”

码头集装箱不能使用“服务sshd重新启动”
EN

Stack Overflow用户
提问于 2017-01-09 09:43:26
回答 1查看 8.5K关注 0票数 2

我正在尝试构建一个hadoop Dockerfile

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

代码语言:javascript
代码运行次数:0
复制
  && 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

我以为当我运行这个容器时:

代码语言:javascript
代码运行次数:0
复制
docker run -it --rm hadoop/tag bash

我将能够:

代码语言:javascript
代码运行次数:0
复制
ssh localhost

但我有个错误:

ssh:连接到主机本地主机端口22:连接被拒绝

如果我在容器中手动运行此操作:

代码语言:javascript
代码运行次数:0
复制
/etc/init.d/ssh restart
# or this
service ssh restart

那我就能联系上了。我认为这意味着sshd重启不起作用。

我在Dockerfile中使用Dockerfile

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-09 15:59:20

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

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

文档:

代码语言:javascript
代码运行次数:0
复制
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]
CMD ["whatever", "your", "command", "is"]

entrypoint.sh:

代码语言:javascript
代码运行次数:0
复制
#!/bin/sh

# Start the ssh server
/etc/init.d/ssh restart

# Execute the CMD
exec "$@"

使用上面的内容重新构建映像,当您使用它启动容器时,它应该在运行CMD之前启动sshd。

如果您愿意的话,您也可以将开始时的基本图像更改为类似于击打基象的内容。它使您可以轻松地启动一些服务,比如syAdd.1-d、sshd,您可能希望容器能够运行。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41544989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档