使用Portainer Git仓库栈部署时,如何自动引入配置文件?
解决Portainer Git栈部署时自动复制Git配置文件的方案
方法一:用初始化容器自动复制配置
你提到的初始化容器思路完全行得通——先启动一个临时容器拉取Git里的配置文件,复制到宿主机的绑定挂载目录,等搞定了再启动Traefik。
给你改好的docker-compose.yml示例:
version: '3.8' services: # 初始化容器:拉取Git配置到宿主机目录 traefik-init: image: alpine/git:latest container_name: traefik-init command: > sh -c " git clone --depth 1 <你的Git仓库地址> /tmp/git-repo && cp /tmp/git-repo/实际路径/traefik.yml /config/traefik.yml && # 要是还有其他配置文件比如dynamic.yml,直接加一行复制命令就行 # cp /tmp/git-repo/实际路径/dynamic.yml /config/dynamic.yml " volumes: # 把宿主机要放配置的目录挂到容器里的/config - type: bind source: ~/docker/traefik/config target: /config restart: "no" # 只跑一次,别重复启动 traefik: image: "traefik:latest" container_name: "traefik" ports: - "80:80" - "443:443" - "8080:8080" volumes: - type: bind source: ~/docker/traefik/config target: /etc/traefik - type: bind source: /var/run/docker.sock target: /var/run/docker.sock:ro # 必须等初始化容器成功跑完才启动Traefik depends_on: traefik-init: condition: service_completed_successfully
注意点:
- 把
<你的Git仓库地址>换成存traefik.yml的仓库URL,私有仓库的话,要么用https://用户名:密码@仓库地址的方式,要么把SSH密钥挂载到容器里。 --depth 1是只拉最新版本,省时间和空间。- 调整
/tmp/git-repo/实际路径/traefik.yml为配置文件在Git里的真实路径。
方法二:配置文件和Compose文件放同一仓库,直接挂载(更简单)
如果traefik.yml和docker-compose.yml在同一个Git仓库里,完全可以让Portainer直接挂载仓库里的配置文件,不用复制到宿主机:
修改Traefik服务的volumes部分就行:
volumes: # 直接把Git仓库里的traefik.yml挂到容器对应路径 - type: bind source: ./traefik.yml target: /etc/traefik/traefik.yml - type: bind source: /var/run/docker.sock target: /var/run/docker.sock:ro
提示:这种方式要求traefik.yml和docker-compose.yml在仓库的同一层级(或者写对相对路径),Portainer部署时会自动把仓库里的文件同步到宿主机临时目录再绑定。后续改配置的话,直接提交Git,再到Portainer重新部署栈就行。
方法三:用Docker卷+初始化容器(适合多服务共享配置)
要是不想用宿主机绑定挂载,就建个Docker卷,让初始化容器把Git配置塞进去,Traefik直接挂这个卷:
version: '3.8' volumes: traefik-config: # 定义一个专用卷 services: traefik-init: image: alpine/git:latest command: > sh -c " git clone --depth 1 <你的Git仓库地址> /tmp/git-repo && cp /tmp/git-repo/实际路径/traefik.yml /config/traefik.yml " volumes: - traefik-config:/config # 把配置塞到卷里 restart: "no" traefik: image: "traefik:latest" container_name: "traefik" ports: - "80:80" - "443:443" - "8080:8080" volumes: - traefik-config:/etc/traefik # 挂载卷到容器配置目录 - /var/run/docker.sock:/var/run/docker.sock:ro depends_on: traefik-init: condition: service_completed_successfully
内容的提问来源于stack exchange,提问作者dev01
相关产品推荐
相关产品推荐

