Это потому, что вы используете USER node
в конце Dockerfile для запуска sshd, который, я полагаю, вы хотите использовать node user
для запуска npm
.
Но предложенный способ заключается в использованииroot
чтобы запустить sshd и использовать node
для запуска npm
, вы можете увидеть известный проект redis
, который использует то же решение здесь
Затем вам нужно было исправить следующее:
- Удалить
USER node
в конце Dockerfile до CMD
. Удалить RUN chmod 0444 /etc/ssh/*
в вашем Dockerfile
В противном случае он будетдалее сообщается, что sshd не работает:
Разрешения 0444 для '/ etc / ssh / ssh_host_ecdsa_key' слишком открыты.
Удалить RUN echo 'PermitRootLogin=without-password' >> /etc/ssh/sshd_config
, используйте следующую для замены:
RUN echo 'PermitRootLogin=yes' >> /etc/ssh/sshd_config
Добавьте RUN apt-get install -y gosu
в Dockerfile для установки gosu, который позже будет использоваться в entrypoint.sh
В entrypoint.sh
измените exec "$@"
на следующее:
exec gosu node "$@"
Это обеспечит npm start
работу с пользовательским узлом.
Затем выможно увидеть, когда запустить контейнер, сshd работает, вы можете использовать service ssh stop && service ssh start
для перезапуска службы, если вам нужно, но, поскольку контейнер хорошо запускает sshd, я думаю, вам не нужно использовать это снова.