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

dockerfile ssh zombie process for ssh autostart

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

我的码头文件: Dockerfile

我的入口点: entrypoint

当我进入容器 bash 并输入:

service ssh status

[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 中犯了一些错误??

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

service ssh restart && bash

更多信息here

希望对您有所帮助。

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

但是,建议的方法是使用 root 启动 sshd & 使用 node 启动 npm,你可以看到一个著名的项目 redis 也使用相同的解决方案here

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

  1. 删除CMD之前Dockerfile末尾的USER node
  2. 在你的dockerfile

    中删除RUN chmod 0444 /etc/ssh/*

    否则接下来会报which make sshd not work:

    Permissions 0444 for '/etc/ssh/ssh_host_ecdsa_key' are too open.

  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 现在好了,我猜您无需再次使用它。