gpt4 book ai didi

docker - 为什么容器在启动时不执行/etc/my_init.d/中的脚本?

转载 作者:行者123 更新时间:2023-12-02 14:32:44 25 4
gpt4 key购买 nike

我有以下Dockerfile:

FROM phusion/baseimage:0.9.16

RUN mv /build/conf/ssh-setup.sh /etc/my_init.d/ssh-setup.sh

EXPOSE 80 22

CMD ["node", "server.js"]

我的 /build/conf/ssh-setup.sh如下所示:
#!/bin/sh

set -e

echo "${SSH_PUBKEY}" >> /var/www/.ssh/authorized_keys

chown www-data:www-data -R /var/www/.ssh
chmod go-rwx -R /var/www/.ssh

它只是将 SSH_PUBKEY env添加到 /var/www/.ssh/authorized_keys以启用ssh访问。

我按照以下方式运行容器:
docker run -d -p 192.168.99.100:80:80 -p 192.168.99.100:2222:22 \
-e SSH_PUBKEY="$(cat ~/.ssh/id_rsa.pub)" \
--name dev hub.core.test/dev

我的容器启动正常,但不幸的是 /etc/my_init.d/ssh-setup.sh脚本未执行,并且我无法ssh我的容器。

您能帮我吗,为什么在我的容器启动时不执行 /var/www/.ssh/authorized_keys

最佳答案

我也有类似的问题,也使用了phusion / baseimage。原来,我的启动脚本需要是可执行的,例如

RUN chmod +x /etc/my_init.d/ssh-setup.sh

注意:

我注意到您没有使用baseimage的init系统(也许是故意的?)。但是,从我对他们的 manifesto的理解来看,这样做放弃了他们整个的“更好的初始化系统”方法。

我的理解是,在您的情况下,他们希望您将 node server.js的启动命令移动到 my_init.d中的脚本中,例如 /etc/my_init.d/start.sh和您的dockerfile中使用其init系统代替start命令,例如
FROM phusion/baseimage:0.9.16

RUN mv /build/conf/start.sh /etc/my_init.d/start.sh
RUN mv /build/conf/ssh-setup.sh /etc/my_init.d/ssh-setup.sh

RUN chmod +x /etc/my_init.d/start.sh
RUN chmod +x /etc/my_init.d/ssh-setup.sh

EXPOSE 80 22

# Use baseimage-docker's init system.
CMD ["/sbin/my_init"]

这将启动baseimage的init系统,然后它将去查找 /etc/my_init.d/并按字母顺序在其中执行所有脚本。并且,当然,它们都应该是可执行的。

我对此的引用是: Running start scriptsGetting Started

关于docker - 为什么容器在启动时不执行/etc/my_init.d/中的脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40574589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com