gpt4 book ai didi

python - 使用 Python 的 'fabric' 运行 docker-compose up

转载 作者:太空宇宙 更新时间:2023-11-03 11:13:56 25 4
gpt4 key购买 nike

我正在使用 Docker(+ Docker Compose)。所有 docker-compose 交互都是通过 Python 'fabric ' 包 (v1)。

例子:

def runserver():
local('docker-compose up')

和:

$ fab runserver

在我尝试从正在运行的 docker-compose up^C 之前一切正常:

  1. docker-compose 在开始停止我的容器时似乎收到了 ^C (SIGINT?) 信号 - 例如:
Stopping celery-export ... done
Stopping celery ...

但是在容器停止过程中(如果容器没有正确响应信号,有时长达 10 秒),我可以按 enter/return 并查看/与我的 shell 交互(就好像该过程已经结束)。

虽然在这个阶段容器还没有完成停止(每个 Stopping ... 行旁边没有 done)。就好像我过早地获得了我的 shell 的访问权限,我可以自由使用它。如果一个延迟完成的容器最终停止(通常在 10 秒后),它会在我当前在终端中所做的事情上绘制 done 线。

例子:

Stopping celery-export ... done
Stopping celery ...
Stopping redis ...

$ uptime
10:54 up 1 day, 17:22, 2 users, load averages: 1.73 1.94 1.92
Stopping celery ... done
Stopping redis ... done

当我直接(在结构之外)调用 docker-compose up 时不会发生这种情况,所以我怀疑它与结构包装命令的执行有关。

预期的行为是在容器停止过程完成之前我无法访问我的 shell。

请原谅我在描述这个问题时缺少适当的术语,如果这对 super 用户而不是 SO 更合适的话。

最佳答案

我想回答,我的回答是我对你问题的看法:

  1. fabric 通过配置运行命令并停止。
  2. docker-compose up 命令:Builds, (re)creates, starts, and attaches to containers for a service .当关键字是 attach 时。当你运行时:
docker-compose up

然后最后一个操作是attach到容器(服务)。例如下一个 docker-compose.yaml:

version: "3.6"


services:
nginx:
image: nginx:latest
ports:
- "8080:80"

如果你运行 docker-compose up 你会看到下一个输出:

Starting fabric_nginx_1 ... done
Attaching to fabric_nginx_1

Attaching to fabric_nginx_1 成功结束与 nginx 服务器的连接。发送到此控制台的 Ctrl-C 或 SIGINT 将停止 nginx 进程和容器(服务)。

要将进程/容器/服务作为守护进程运行,您应该运行 docker-compose detached 并使用 -d/--detach 开关。

docker-compose up -d

然后您的服务将作为服务运行。对于停止,你应该使用:

  1. > docker-compose stop
  2. > docker-compose kill
  3. > docker-compose down

结论:在您的情况下,所有工作均按设计进行。 Fabric 运行 docker-compose 命令并停止。 docker-compose 创建容器,运行并停止。容器行为是将自己的内容打包到容器中。

关于python - 使用 Python 的 'fabric' 运行 docker-compose up,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55330714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com