我有以下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 scripts和 Getting Started。




