嗨,我在使用容器自动启动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中犯了一些错误吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
这是因为您在Dockerfile的末尾使用了USER node
来启动sshd,我想您想使用node user
来启动npm
。
但是,建议的方法是使用root
启动sshd并使用node
启动npm
,您可以看到一个著名的项目redis
,它使用相同的解决方案{ {3}}
然后,您需要进行下一步修复:
USER node
之前的Dockerfile末尾删除CMD
。在您的dockerfile中删除RUN chmod 0444 /etc/ssh/*
否则,它将在下一次报告中使sshd不起作用:
'/ etc / ssh / ssh_host_ecdsa_key'的权限0444太开放了。
删除RUN echo 'PermitRootLogin=without-password' >> /etc/ssh/sshd_config
,使用next替换:
RUN echo 'PermitRootLogin=yes' >> /etc/ssh/sshd_config
在Dockerfile中添加RUN apt-get install -y gosu
以安装gosu,稍后将在entrypoint.sh
在entrypoint.sh
中,将exec "$@"
更改为下一个:
exec gosu node "$@"
这将确保npm start
仍在用户节点上运行。
然后,您可以看到启动容器时sshd可以正常工作,可以根据需要使用service ssh stop && service ssh start
重新启动服务,但是由于容器现在可以很好地运行sshd了,我想您不需要使用它再次。