【Drone CI】DinDのコンテナを起動しようとすると「linter: untrusted repositories cannot enable privileged mode」のエラーがでる

Drone CIでDinDのコンテナを起動しようとすると「linter: untrusted repositories cannot enable privileged mode」のエラーがでる。

エラー内容

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なので、次の手順でリポジトリ設定を変更します。

  1. sqlite3コマンドのインストール

Droneのコンテナに入ってsqlite3コマンドをインストールします。

コマンド実行(Windowsの場合)

winget install SQLite.SQLite

コマンド実行(Macの場合)

brew install sqlite3
  1. sqlite3コマンドの実行

Droneのコンテナに入ってsqlite3コマンドを実行します。

コマンド実行

sqlite3 drone_server/data/database.sqlite "update repos set repo_trusted=1;"
  1. 更新の確認

正常に更新されたか確認します。

コマンド実行

sqlite3 drone_server/data/database.sqlite "select repo_name,repo_trusted from repos;"

次のように表示されればOKです。repo_trustedの値が1になっていれば正常に更新されています。

SQLを実行してrepo_trustedが1になっている事を確認している画像

次の手順でDinDでのビルドを再実行すれば、エラーは出ずに、正常に実行されます。

GogsのBuildsタスクでdockerコマンドが実行できている画像

コメント

コメントを残す

マークダウン形式でコメントを入力できます。

アップロードファイルの最大サイズ: 512 MB。 画像, 音声, 動画, 文書, スプレッドシート, 対話型, テキスト, アーカイブ, コード, その他 をアップロードできます。 Youtube、Facebook、Twitter および他サービスへのリンクは自動的にコメント内に埋め込まれます。 ここにファイルをドロップ

プロフィール背景
Ryosuke
Ryosuke

ITエンジニア & 講師

クラウドネイティブやアーキテクチャ設計の講師として活動しながら、ITエンジニアのDXを推進するために新しい技術やベストプラクティスを常に学び、エンジニアの生産性と開発品質の向上に貢献することを目指しています。猫5匹飼っています。山奥のポツンと一軒家に住んでいて、事務所は海の近くです。