gpt4 book ai didi

docker - Gitlab-runner + Docker-compose 部署方案 : how to properly restart containers after reboot of host server

转载 作者:行者123 更新时间:2023-12-05 05:42:27 25 4
gpt4 key购买 nike

假设我在 Gitlab 上有存储库并遵循以下部署方案:

  1. 在主机服务器上使用 docker 执行程序设置 docker 和 gitlab-runner。
  2. .gitlab-ci.yml 中设置 docker-compose 来构建和构建我的服务以及依赖项。
  3. 通过将提交推送到 production 分支来设置要触发的管道。

假设 docker-compose.yml 有两个服务:app (with restart: always) 和 db (无需重新启动规则)。 app 依赖于 db 所以 docker-compose up 启动 db 然后是 app

在主机服务器重新启动之前,它可以完美运行。之后只有 app 容器重新启动。

我发现的解决方法及其缺点:

  1. restart: always 添加到db 服务。但是 app 可以在 db 之前启动,因此会失败。
  2. 在主机上使用 docker-compose 并设置 docker-compose up 自动运行。但在那种情况下,我应该设置 docker-compose,部署 ssh-keys,将代码克隆到主机服务器的某个地方并更新它。好像违反了DRY原理和过于复杂的方案。
  3. 重启后触发流水线。我发现的唯一方法是通过 API and trigger token 触发它.但在那种情况下,我必须设置触发 token ,它看起来不像以前那么糟糕但违反了 DRY原理和过于复杂的方案。

如何改进部署方案,使 docker 在重启后以正确的顺序重启容器。

附言配置如下:

.gitlab-ci.yml:

image:
name: docker/compose:latest

services:
- docker:dind
stages:
- deploy

deploy:
stage: deploy
only:
- production
script:
- docker image prune -f
- docker-compose build --no-cache
- docker-compose up -d

docker-compose.yml:

version: "3.8"
services:
app:
build: .
container_name: app
depends_on:
- db
ports:
- "80:80"
restart: always
db:
image: postgres
container_name: db
ports:
- "5432:5432"

最佳答案

当您将 restart: always 添加到 db 服务时,您的应用程序可以在 db 之前启动并失败。但是您的应用程序必须在失败后重新启动,因为“重启:始终”政策,如果它不起作用,可能是您从失败的应用程序中获取了错误的退出代码。
所以你可以添加 healthcheck并在延迟后重新启动应用程序,您认为应用程序必须正常工作。
简单检查 80 端口会有所帮助。

关于docker - Gitlab-runner + Docker-compose 部署方案 : how to properly restart containers after reboot of host server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72027743/

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