如
docker-composerun(2015)中所述
运行传递的命令将覆盖服务配置中定义的命令 。
例如,如果Web服务配置以开头bash,则用docker-compose run web python app.py覆盖它pythonapp.py。第二个区别是该
docker-compose run命令 不创建服务配置中指定的任何端口 。
这样可以防止端口与已经打开的端口发生冲突。如果确实要创建服务的端口并将其映射到主机,请指定–service-ports标志:
$ docker-compose run --service-ports web python manage.py shell
因此,除非您有这些特定需求(覆盖命令或仅在不同端口上运行一个容器),否则
docker-compose up(即使对于一个容器)也足够。
您能帮助解释为什么或何时不希望创建端口吗?这就是为什么或它们可能与已经打开的端口冲突的原因
仅仅是因为
docker-compose run可以为您的服务运行一次性命令。
这意味着,如果您已经执行过a
docker-compose up,则所有容器都已经在从的指定端口上运行
docker-compose.yml。
如果
docker-compose run在此阶段执行a(一次性执行命令),如果它遵循相同的端口,则将立即失败。因此,默认情况下不创建这些端口。
另一个用例(在Compose环境变量参考中):
要查看哪些环境变量可用于服务,请运行
docker-compose run SERVICE env。
这些命令的最新(2019+)版本在
docker/docker.github.io:
docker compose run
docker compose up



