Docker Compose中--entrypoint参数的覆盖范围及指定单个服务覆盖的问题
嘿,我来帮你捋清楚这个疑问~
首先先给你吃个定心丸:docker compose run命令里的--entrypoint参数,本来就只会覆盖你最后指定的那个服务(也就是这里的my-service)的入口点,依赖的other-service应该还是会按照它自己的镜像或者compose配置里的entrypoint正常启动的。你觉得两个服务的entrypoint都被覆盖了,大概率是个误会,或者是其他小细节导致的错觉。
咱们看官方文档里的描述也能佐证这一点:
--entrypoint Override the entrypoint of the image
这里的“the image”指的就是你要运行的目标服务对应的镜像,也就是my-service的镜像,并不是所有服务的镜像都受这个参数影响。那为什么你会觉得other-service的entrypoint也变了?可能是它本身的entrypoint和my-service原本的entrypoint一样,或者你没仔细区分两者的运行日志?
那怎么确保只有my-service的entrypoint被覆盖呢?其实你现在的命令写法本身就是对的:
docker compose -f docker/docker-compose.yml run \ --rm --entrypoint "" \ my-service
这个命令里的--entrypoint ""只会作用在后面的my-service上,other-service会严格按照你docker-compose.yml里的配置启动,不会被修改entrypoint。
如果还是不放心,或者确实遇到了异常情况,你可以试试这两个小技巧:
- 在
docker-compose.yml里给other-service明确指定它的entrypoint,避免被意外影响,比如:version: '3.9' services: my-service: depends_on: other-service # 这里不用额外配置entrypoint,交给run命令覆盖就行 other-service: entrypoint: ["你原本的entrypoint命令"] # 其他配置... - 每次运行前先清理一下缓存,比如执行
docker compose down -v,再重新运行命令,避免旧的容器配置干扰。
总结一下:你的命令本身是正确的,--entrypoint只会覆盖目标服务的入口点,依赖服务不会被影响~
备注:内容来源于stack exchange,提问作者Paflow

