我应该使用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