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