我应该使用docker-compose启动还是运行?

有没有理由使用运行来启动一个docker-compose.yml文件,或者你只是up

我明白, run可以启动一个特定的容器,但是我指的是你用它来指定一个容器,以便启动所有的yml容器的情况。

正如在docker-compose run提到的那样:

运行传递的命令将覆盖服务configuration中定义的命令
例如,如果web服务configuration是用bash启动的,那么docker-compose run web python app.py会用python app.py覆盖它。

第二个区别是docker-compose run命令不会创build服务configuration中指定的任何端口
这可以防止端口与已经打开的端口发生冲突。 如果您希望创build服务的端口并将其映射到主机,请指定–service-ports标志:

 $ docker-compose run --service-ports web python manage.py shell 

所以除非你有这些特定需求(重写一个命令或者在不同的端口上只运行一个容器), docker-compose up (甚至是一个容器)就足够了。

你能解释一下为什么或者什么时候你不想创build端口? 这就是为什么或何时可能与已经开放的港口发生冲突

仅仅因为docker-compose run是为你的服务运行一次性的命令。
这意味着,如果你已经做了一个docker-compose up ,所有的容器已经在docker-compose.yml的指定端口上运行了。
在此阶段执行docker-compose run (执行一次性命令),如果它是尊重相同的端口,将立即失败。 因此这些端口的默认非创build。


另一个用例(在Compose环境variables引用中 ):

要查看哪些环境variables可用于服务,请运行docker-compose run SERVICE env

我想指出的是,如果您使用Python与pdbdebugging器:

 import pdb; pdb.set_trace() 

如果使用以下命令执行脚本,它不会放到shell中:

 docker-compose up 

但是,如果您使用运行,它会按预期下降到debugging器:

 docker-compose run