Drone CIでDinDのコンテナを起動しようとすると「linter: untrusted repositories cannot enable privileged mode」のエラーがでる。
エラー内容
linter: untrusted repositories cannot enable privileged mode
実行しようとしたパイプラインの設定は以下の通りです。docker:dind
のコンテナイメージを使って、docker ps
コマンドを実行するだけのパイプラインです。
.drone.yml
kind: pipeline
name: default
steps:
- name: test
image: docker:dind
volumes:
- name: dockersock
path: /var/run
commands:
- sleep 5
- docker ps -a
services:
- name: docker
image: docker:dind
privileged: true
volumes:
- name: dockersock
path: /var/run
volumes:
- name: dockersock
temp: {}
環境
- Windows 11 Pro
- Docker Desktop 4.21.1
- Drone 2.20.0
原因
Drone上のリポジトリは初期設定でtrusted
の値がfalse
になっています。trusted
の値がfalse
の状態だと、DinDのコンテナのような特権を必要とするコンテナを起動することができません。
解決策
DroneのDBにアクセスして、リポジトリテーブルのtrusted
の値をtrue
に変更します。今回の環境はDroneのDBはsqlite3なので、次の手順でリポジトリ設定を変更します。
- sqlite3コマンドのインストール
Droneのコンテナに入ってsqlite3コマンドをインストールします。
コマンド実行(Windowsの場合)
winget install SQLite.SQLite
コマンド実行(Macの場合)
brew install sqlite3
- sqlite3コマンドの実行
Droneのコンテナに入ってsqlite3コマンドを実行します。
コマンド実行
sqlite3 drone_server/data/database.sqlite "update repos set repo_trusted=1;"
- 更新の確認
正常に更新されたか確認します。
コマンド実行
sqlite3 drone_server/data/database.sqlite "select repo_name,repo_trusted from repos;"
次のように表示されればOKです。repo_trusted
の値が1
になっていれば正常に更新されています。
次の手順でDinDでのビルドを再実行すれば、エラーは出ずに、正常に実行されます。