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

Rai*_*aif 102 docker docker-compose

是否有理由使用run启动docker-compose.yml文件或者您应该使用up

我知道run可以启动一个特定的容器,但我指的是你在没有指定容器的情况下使用它的情况,以便启动所有的yml容器.

Von*_*onC 113

如上所述docker-compose run:

run传递的命令会覆盖服务配置中定义的命令.
例如,如果启动了Web服务配置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
Run Code Online (Sandbox Code Playgroud)

因此,除非您有这些特定需求(覆盖命令或在不同端口上只运行一个容器),docker-compose up(即使对于一个容器)也足够了.

你能帮忙解释为什么或什么时候不想创建端口?这就是他们可能与已经开放的端口冲突的原因

只是因为docker-compose run为您的服务运行一次性命令.
这意味着,如果您已经执行过docker-compose up,则所有容器都已在其指定端口上运行docker-compose.yml.
docker-compose run在这个阶段(以执行一断开指令),如果它是关于相同的端口,将立即失效.因此默认不创建这些端口.


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

要查看服务可用的环境变量,请运行docker-compose run SERVICE env.

  • 不要忘记在 `run` 之后添加 `--rm`,否则每次运行 `docker-compose run ...` 时都会创建容器,这些容器在退出后不会被删除。当您没有意识到这一点并进行了一段时间的测试时,这可能会导致出现一长串容器。:) (3认同)

qui*_*hts 23

我想指出,如果你使用Python与pdb调试器:

import pdb; pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)

如果您使用以下命令执行脚本,它将不会删除到shell:

docker-compose up
Run Code Online (Sandbox Code Playgroud)

但是,如果您使用run,它将按预期下拉到调试器:

docker-compose run
Run Code Online (Sandbox Code Playgroud)


Jay*_*Jay 21

docker docs有一个答案。

通常,您希望docker-compose up. 使用up启动或重新启动所有定义的服务docker-compose.yml。在默认的“附加”模式下,您会看到来自所有容器的所有日志。在“分离”模式 ( -d) 下,Compose 在启动容器后退出,但容器继续在后台运行。

docker-compose run命令用于运行“一次性”或“临时”任务。它需要您要运行的服务名称,并且只为正在运行的服务所依赖的服务启动容器。使用run 运行测试或执行管理任务,如删除或添加数据的数据量的容器。该run命令的作用类似于 docker run -ti它向容器打开一个交互式终端,并返回与容器中进程的退出状态匹配的退出状态。

  • 这应该是公认的答案。基本上,使用“docker-compose run”对正在运行的服务执行命令,并使用“docker-compose up”生成新服务。 (2认同)