Portainer中的Docker堆栈是否支持“Docker组合配置文件”?

hgtggwj0  于 2023-03-07  发布在  Docker
关注(0)|答案(1)|浏览(264)

我正在使用下一个工具版本:

  • Ubuntu版本:22.04.1
  • Docker版本:23.0.0,构建版本e92dd87
  • Docker合成版本:版本2.16.0
  • Portainer版本:2.17.0

我正在尝试通过Portainer从Git repository设置堆栈,方法是遵循官方文档中的下一个说明。
我正在使用2个配置文件:devprod,因此我的docker docker-compose.yml文件如下所示:

version: '3.4'

services:
  backend:
    image: ${DOCKER_REGISTRY-}myproject
    profiles: ["dev", "prod"]

  db:
    image: postgres:15.2-alpine3.17
    profiles: ["dev", "prod"]

  frontend:
    image: ${DOCKER_REGISTRY-}myproject_frontend
    profiles: ["dev", "prod"]

volumes:
  db_data:
  frontend_data:
  logs:

当我尝试通过COMPOSE_PROFILES ENV变量在Portainer堆栈中使用我的prod配置文件时,就像COMPOSE_PROFILES=prod docker compose up一样,如果我根本不使用任何ENV变量,我会得到相同的错误。错误如下:

Deployment error
failed to deploy a stack: no service selected

我尝试在Additional paths字段中指定docker-compose.prod.yml文件的路径,但得到了与上面相同的错误。如果我尝试在Compose path中使用docker-compose.prod.yml的路径,则每个命名卷都得到了下一个错误:

service "frontend" refers to undefined volume "frontend_data"

我以为我的docker-compose.prod.yml文件中有问题,但当我将其内容复制到docker-compose.yml(并删除COMPOSE_PROFILES ENV变量)时,堆栈成功创建。
所以我的问题是关于在Portainer Stacks中使用Docker编写配置文件的能力。是不可能还是我做错了什么?

fwzugrvs

fwzugrvs1#

我放弃了Docker堆栈(想在GitHub仓库更改后首先使用它来自动更新容器),并使用了GitHub的容器注册表+瞭望塔(containrrr/watchtower)。
下面我的工作代码从.github/workflows/publish.yml,也许它会有用的人

on:
  # any code pushed to master and develop branch will be a trigger
  push:
    branches: ["master", "develop"]

name: Deploy
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Build Compose Images
        run: docker compose -f docker-compose.publish.yml build

      # seems that `secrets.GITHUB_TOKEN` and `github.actor` provided by Github automatically (https://docs.github.com/en/actions/security-guides/automatic-token-authentication#using-the-github_token-in-a-workflow)
      - name: Log into registry
        run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin

      - name: Push image to Container Registry
        run: docker compose -f docker-compose.publish.yml push

关于docker-compose.publish.yml的一些附带说明

  • 在第一行使用version: '3.8'
  • 在Postgres中使用db服务的指令代码以避免其发布
deploy:
      replicas: 0
  • 将下一个image指令用于前端和后端服务,container_name指令与映像中的project_name相同
image: ghcr.io/name_of_our_organization_on_github/project_name_backend # `:latest` version used by default
container_name: project_name_backend
...
image: ghcr.io/name_of_our_organization_on_github/project_name_frontend # `:latest` version used by default
container_name: project_name_frontend

相关问题