docker:不覆盖基本映像入口点

时间:2020-06-26 18:16:19

标签: docker dockerfile

我想要一个可扩展mongo图像并在其上带有ssh的docker图像。我写了这行:

FROM mongo

RUN apt-get update && \
    apt-get install -y openssh-server

EXPOSE 22

RUN useradd -s /bin/bash -p $(openssl passwd -1 test) -d /home/nf2/ -m -G sudo test

CMD ["sh", "-c", "service ssh start", "bash"]

这仅从ssh开始,而不是mongo。如果我删除了最后一行,则mongod从基本映像执行。

有没有想法在同一张图片中同时运行两个命令?

2 个答案:

答案 0 :(得分:2)

如@David所述,CMD通常运行一个进程,因此当您用service ssh start覆盖它时,它将不会运行Mongo,因为它将覆盖运行Mongo进程的基本映像CMD

尝试更改CMD以启动两个过程。

CMD ["sh", "-c", "service ssh start && mongod"]

但是您应该知道service ssh是否由于某种原因而停止,您的容器仍将继续运行,并且一旦Mongo进程停止,容器将死亡。 您可以使用以下命令进行验证

docker run  -dit --name test --rm abc && docker exec -it test bash -c "service ssh status"
ce30fa23eeb07f1e268008cce7566585ba1f98c0a3054cecb145443f3275a0d4
 * sshd is running

更新

由于mongod仅会启动Mongo进程,并且不会发生任何初始化DB,因此请尝试更改用于模仿DB的命令。

FROM mongo
RUN apt-get update && \
    apt-get install -y openssh-server
ENV MONGO_INITDB_ROOT_USERNAME=root
ENV MONGO_INITDB_ROOT_PASSWORD=example
RUN useradd -s /bin/bash -p $(openssl passwd -1 test) -d /home/nf2/ -m -G 
CMD ["sh", "-c", "service ssh start && docker-entrypoint.sh mongod"]

答案 1 :(得分:-1)

Docker Machine

您似乎可以使用docker-machine来模拟您的需求。根据官方文档:

Docker Machine是一种工具,可用于在虚拟主机上安装Docker Engine,并使用docker-machine命令管理主机。

如果我的解释正确,那么您想管理运行mongo容器的主机。使用docker-machine,您可以预配置其中安装了docker-engine的VM。然后,您可以在此VM中运行mongo容器。
要访问您的Docker主机(VM),可以使用docker-machine ssh
要将文件传输到Docker主机(VM),可以使用docker-machine scp