Featured image of post 在 Portainer CE 上使用相對路徑卷

在 Portainer CE 上使用相對路徑卷

相對路徑卷是 Portainer EE 的功能,但是在 Portainer CE 中,我們可以使用其他方法來實現相對路徑卷。

最後更新
約 640 字

前言

在部署 Docker 容器時,有時會需要使用特定的設定檔來設定容器,如果設定檔是固定的或很少更新,我們可以直接將設定檔放 Git 上,然後在部署容器時直接從 Git 上拉取設定檔。

Portainer CE 提供定時拉取或者經由 Webhook 觸發拉取功能,可以在更新 Git 後自動重新部署容器,使用 Git 來拉取設定檔,這樣可以保證容器的設定檔是最新的,並且可以方便地管理和追蹤設定檔的變更。

docker-compose.yml 中,我們可以使用 volumes 用格式 ./config.ini:/config/config.ini 來掛載設定檔。

可是在 Portainer CE 中,我們無法使用相對路徑來掛載設定檔,這個功能只在 Portainer EE 中才有,所以我們需要使用其他方法來實現相對路徑掛載。

解決方法

在 Portainer CE 中,部署使用了相對路徑的容器後,可以留意到容器的掛載路徑是 /data,這個路徑是 Portainer CE 預設的掛載路徑,而且無法更改,我們需要將設定檔放在 /data 資料夾中檔。

可是由於 /data 並不存在於我們的主機中,所以我們需要在主機中建立一個 /data 資料夾。

Portainer CE 在 Git 取得 docker-compose.yml (會同時拉取其他檔案,不侷限於設定檔案) 後,會儲存在 Docker Volume 中的 portainer_data 資料夾,所以我們可以將 /data 資料夾連結到 portainer_data 資料夾中的 _data 資料夾,來實現相對路徑掛載,解決找不到檔案的問題。

1
ln -s /var/lib/docker/volumes/portainer_data/_data /data

要留意是如果容器中修改了設定檔,這個修改是不會反映到 Git 中的,如果要更新設定檔,就要需要手動更新 Git 中的設定檔,然後重新部署容器。

使用例子

使用相對路徑卷的例子,在 Git 中新增 uploads.ini 來設定 Wordpress 容器中的 PHP 設定,提高上傳檔案的大小限制和提高記憶體限制。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
version: "3.3"

services:
  wordpress:
    image: wordpress:latest
    restart: always
    ports:
      - "80:80"
    environment:
      WORDPRESS_CONFIG_EXTRA: |
        $$_SERVER['HTTPS'] = 'on'; // fix Cloudflare SSL redirect loop        
    volumes:
      - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini

在 Repo 根目錄新增 uploads.ini 檔案,內容如下:

1
2
3
4
5
file_uploads = On
memory_limit = 500M
upload_max_filesize = 500M
post_max_size = 500M
max_execution_time = 600

使用 Hugo 建立
主題 StackJimmy 設計