当我构建并运行docker容器时,我发现了非常奇怪的行为。我想要有cassandra和ssh的容器。 在我的Dockerfile中,我得到了:
RUN echo "deb http://www.apache.org/dist/cassandra/debian 20x main" | sudo tee -a /etc/apt/sources.list
RUN echo "deb-src http://www.apache.org/dist/cassandra/debian 20x main" | sudo tee -a /etc/apt/sources.list
RUN gpg --keyserver pgp.mit.edu --recv-keys 4BD736A82B5C1B00
RUN apt-key add ~/.gnupg/pubring.gpg
RUN apt-get update
RUN apt-get -y install cassandra
然后是ssh
RUN apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo '{{ docker_ssh_user }}:{{docker_ssh_password}}' | chpasswd
EXPOSE 22
我添加了启动脚本来运行我想要的所有内容:
USER root
ADD start start
RUN chmod 777 start
CMD ["sh" ,"start"]
这就是问题所在。当我开始时如下:
#!/bin/bash
/usr/sbin/sshd -D
/usr/sbin/cassandra -f
SSH运行良好。我可以做ssh root@172.17.0.x
。登录容器后,我尝试运行cqlsh
以确保cassandra正常工作。但cassandra
由于某种原因未启动,我无法访问cqlsh
。我还检查了/var/log/cassandra/
,但它是空的。
在第二种情况下,我将启动脚本更改为:
#!/bin/bash
/usr/sbin/sshd -D & /usr/sbin/cassandra/ -f
我再次尝试连接ssh root@172.17.0.x
,然后当我在容器内运行cqlsh
时,我已连接到cqlsh
。
所以我认为&符号&
正在做一些voodoo
一切都运作良好?
为什么我不能用另一个命令运行bash staring脚本?
或者我错过了其他什么?
感谢阅读&&帮助
答案 0 :(得分:2)
感谢我的朋友linux guru,我们找到了错误的原因。
/usr/sbin/sshd -D
表示-D
:指定此选项时,sshd不会分离,也不会成为守护程序。这样可以轻松监控sshd
所以在第一个脚本sshd -D
阻止下一个命令运行。
在第二个脚本中,我有&
让sshd -D
进入背景,然后cassandra可以开始。
最后我得到了这个版本的脚本:
#!/bin/bash
/usr/sbin/sshd
/usr/sbin/cassandra -f