ssh自动启动的dockerfile ssh僵尸进程

时间:2019-07-07 15:01:46

标签: docker ssh dockerfile zombie-process

嗨,我在使用容器自动启动sshd时遇到了一些大问题。

我的dockerfile: Dockerfile

我的入口点: entrypoint

当我进入容器bash并输入:

  

服务ssh状态

[FAIL] sshd is not running ... failed!

我也得到了僵尸ssh进程:-|

  

ps -ef | grep ssh

node        15     1  0 14:49 ?        00:00:00 [sshd] defunct

node       183   142  0 14:59 pts/0    00:00:00 grep ssh

我在dockerfile中犯了一些错误吗?

2 个答案:

答案 0 :(得分:0)

将此添加到您的入口点脚本中。

service ssh restart && bash

更多信息here

希望这会有所帮助。

答案 1 :(得分:0)

这是因为您在Dockerfile的末尾使用了USER node来启动sshd,我想您想使用node user来启动npm

但是,建议的方法是使用root启动sshd并使用node启动npm,您可以看到一个著名的项目redis,它使用相同的解决方案{ {3}}

然后,您需要进行下一步修复:

  1. USER node之前的Dockerfile末尾删除CMD
  2. 在您的dockerfile中删除RUN chmod 0444 /etc/ssh/*

    否则,它将在下一次报告中使sshd不起作用:

      

    '/ etc / ssh / ssh_host_ecdsa_key'的权限0444太开放了。

  3. 删除RUN echo 'PermitRootLogin=without-password' >> /etc/ssh/sshd_config,使用next替换:

    RUN echo 'PermitRootLogin=yes' >> /etc/ssh/sshd_config
    
  4. 在Dockerfile中添加RUN apt-get install -y gosu以安装gosu,稍后将在entrypoint.sh

  5. 中使用
  6. entrypoint.sh中,将exec "$@"更改为下一个:

    exec gosu node "$@"
    

    这将确保npm start仍在用户节点上运行。

然后,您可以看到启动容器时sshd可以正常工作,可以根据需要使用service ssh stop && service ssh start重新启动服务,但是由于容器现在可以很好地运行sshd了,我想您不需要使用它再次。