我想要一个扩展 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
从基本图像执行。
想在同一个图像中运行这两个命令吗?
最佳答案
正如@David 所提到的,CMD 通常运行一个进程,因此当您使用 service ssh start
覆盖它时,它不会运行 Mongo,因为它将覆盖基本图像 CMD
运行 Mongo 进程。
尝试更改 CMD
以启动这两个进程。
CMD ["sh", "-c", "service ssh start && mongod"]
但是你应该知道,如果服务 ssh 由于某种原因停止,你的容器将继续运行,一旦 Mongo 进程停止,它就会死掉。 您可以使用以下命令进行验证
docker run -dit --name test --rm abc && docker exec -it test bash -c "service ssh status"
ce30fa23eeb07f1e268008cce7566585ba1f98c0a3054cecb145443f3275a0d4
* sshd is running
更新:
由于 mongod 只会启动 Mongo 进程,不会发生 init 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"]
关于 docker : do not override base image entrypoint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62600652/