在 Docker 中,当启动容器时,会按照以下顺序执行:
首先执行 Dockerfile 中定义的 ENTRYPOINT 命令(如果有)。
然后执行 docker run 命令或 docker-compose.yml 文件中定义的 CMD 命令(如果没有定义 ENTRYPOINT 命令)或是和ENTRYPOINT命令一起指定的参数(如果有定义 ENTRYPOINT 命令)。
因此,在使用 Docker Compose 启动容器时,会先执行 docker-compose.yml 中定义的 ENTRYPOINT 命令,然后再执行 CMD 命令。如果在 Docker Compose 文件中没有定义 ENTRYPOINT 命令,则直接执行 CMD 命令。
需要注意的是,Docker Compose 中的 command 是覆盖 CMD 命令的,而不是覆盖 ENTRYPOINT 命令的。如果在 Docker Compose 中同时定义了 entrypoint 和 command,那么最终执行的命令会是 entrypoint + command。例如:
entrypoint: ["/bin/bash"]
command: ["-c", "echo Hello, World!"]
这个配置等价于 docker run /bin/bash -c "echo Hello, World!"。




