Entrypoint命令在这里如何工作

时间:2019-05-27 08:28:48

标签: mongodb docker docker-compose dockerfile

以下docker compose文件中给出的 ENTRYPOINT 命令如何工作。我在replica Set mongo docker-compose中找到了docker compose文件。 “ usr / bin / mongod ”是 ENTRYPOINT 中给出的第一个命令,我的问题 usr / bin / mongod 将启动本地mongo并运行具有docker容器的本地mongo,或者它将从存储库中提取mongo映像并将其作为容器运行(如果这样的话),为什么我们要使用“ usr / bin / mongod ”。

version: "3"
services:
  mongo-1:
    hostname: mongo-1
    container_name: mongo-1
    image: mongo:4.0
    ports:
      - "127.0.0.1:28000:28000"
    volumes:
      - ./mongo-1/data:/data/db
    restart: always
    entrypoint: [ "/usr/bin/mongod", "--port", "28000", "--bind_ip_all", "--replSet", "rs1" ] 

使用此撰写文件,我能够从主机连接在端口28000中运行的mongoDB,但是当我在撰写文件中将 ENTRYPOINT 替换为 CMD 时,我却没有能够从主机连接mongoDB。

1 个答案:

答案 0 :(得分:0)

您正在使用映像“ mongo:4.0”,该映像已定义了自己的ENTRYPOINT和CMD。当您在docker-compose.yml中重新声明其中的任何一个时,您将覆盖原始的。

ENTRYPOINT是主要命令,而CMD只是发送到主要命令的参数。因此,当您使用有效命令定义ENTRYPOINT时,它将为您工作。如果将其更改为CMD,则在运行时是原始ENTRYPOINT(“ docker-entrypoint.sh”)和新命令。

您的入口点使用基于指定图像的容器内部的二进制文件。

作为参考,您可以看到官方映像的Dockerfile:https://github.com/docker-library/mongo/blob/40056ae591c1caca88ffbec2a426e4da07e02d57/4.0/Dockerfile

在最后定义了ENTRYPOINT和CMD。