我有以下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


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!