docker : do not override base image entrypoint

标签 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 从基本图像执行。

想在同一个图像中运行这两个命令吗?

最佳答案

正如@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/

相关文章:

docker - 无法在 dockerfile 中执行 gcloud init

使用 docker run 命令的 Docker ENTRYPOINT

docker - 带有重定向命令的Dockerfile “RUN echo”导致文件名困惑

python - 如何在基于 Alpine 镜像的 Docker 化应用程序中启用 WebSocket 连接(WebSocketAddressException : [Errno -3])?

postgresql - docker-compose 中的 PostgresDB 初始化

docker - 创建一个新的Docker VM

docker - Docker Swarm是否使节点之间的数据保持同步?

docker - 静态 IP 地址在 docker compose v3 中不起作用

maven - spotify dockerfile-maven Dockerfile

node.js - 无法访问本地主机 :3030 - NodeJS Docker