Docker ビルドで出た CondaToSNonInteractiveError を「defaults 不使用」で根本解決する話

目次

TL;DR

  • 2025年7月15日以降、Anacondaのconda-anaconda-tosプラグインがインストーラに同梱され,defaultsチャネル利用時に利用規約(ToS)同意が必須に。
  • Minicondaのアップデートで.condarcdefaultsが自動追加される仕様と相まって,非対話環境(Docker/CI)ではビルド時にCondaToSNonInteractiveErrorが発生する。
  • これを2パタンで解決したよって話。

ゴール:Docker ビルド中の「CondaToSNonInteractiveError」を解決する

Dockerイメージのビルド中、conda env createCondaToSNonInteractiveErrorが発生。
原因は、

  1. Minicondaの最新版で.condarcdefaultsが自動追加される仕様
  2. 2025年7月15日からのconda-anaconda-tosプラグイン同梱によるToS同意必須化

defaultsを使わない構成(conda-forgeのみ)に変更することで、ToSプロンプトを回避し安定してビルドできるようになりました。

発生環境

  • ベースイメージ:Ubuntu 20.04
  • パッケージ管理:Miniconda(24.9.2-0以降)
  • ビルドコマンドconda env create -f environment.yml

User-facing Changes

  • A .condarc file is written into the installation directory to set the channel to Anaconda’s defaults channels.
Miniconda 24.x release notes

原因と再現ログ

1) 事象の再現とログ確認

ビルドが以下で停止:

RUN conda env create -f /workdir/environment.yml

CondaToSNonInteractiveError: Terms of Service have not been accepted for:
  https://repo.anaconda.com/pkgs/main
  https://repo.anaconda.com/pkgs/r
To accept a channel's Terms of Service:
  conda tos accept --override-channels --channel CHANNEL

非対話の Docker ビルドでは同意プロンプトに答えられないため停止します。

2) 原因切り分け

  • Miniconda 24.9.2-0以降,インストール直後の.condarcdefaultsが自動追加される。
  • conda config --remove channels defaultsでは.condarcの記述は消せないため,ビルド時にdefaultsが参照され続ける。
  • defaultsはToS対象チャネルのため,未同意だとエラー発生。

対処法

方法1(推奨):defaultsを使わずconda-forgeのみ利用

Minicondaインストール直後に.condarcを書き換え,defaultsを削除または置換。

# Miniconda のサイレントインストール直後
RUN bash /workdir/$MINICONDA -b -p /opt/conda

# 重要:defaults を使わない(ToS 対象を外す)
RUN sed -i 's/defaults/conda-forge/g' /opt/conda/.condarc

# 以降、環境作成
RUN conda env create -f /workdir/environment.yml

conda-forge はコミュニティ運営のチャネルで,Anaconda の ToS 変更の適用外。
(= defaults を使わなければ ToS による制約を避けられる)。

方法2:自動同意でdefaultsを継続利用

既存環境を崩したくない場合は,自動同意を設定。

ENV CONDA_PLUGINS_AUTO_ACCEPT_TOS=yes

または

conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main

商用環境でdefaultsを継続利用する場合は有償契約が必要な可能性があります。

FAQ

DockerビルドでCondaToSNonInteractiveErrorが発生するのはなぜ?

2025年7月15日以降,Anacondaのconda-anaconda-tosプラグインがインストーラに同梱され,defaultsチャネルを使う場合は利用規約(ToS)への同意が必須になりました。
この変更により,非対話で動くDockerやCI環境でもToS同意が厳密にチェックされ,未同意だとCondaToSNonInteractiveErrorが発生します。

詳細は以下をご覧ください。
ToSプラグイン公式案内 / Anaconda ToS

CondaToSNonInteractiveErrorを回避する方法はある?

主な方法は2つです。

  1. .condarcを編集してdefaultsチャネルを削除し,conda-forgeなどToS対象外のチャネルに切り替える。
  2. conda tos accept コマンドで事前に明示的に同意し,ビルドを通す。

長期運用や商用環境では,「defaults不使用」がライセンス面でも安定的です。

まとめ

  • ビルド失敗の正体は ToS 同意必須化 × Miniconda の defaults 自動設定によるもの。
  • 根本回避はdefaults不使用,代替は自動同意。
  • 運用ポリシーに応じて選択可能。

参考

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次