Docker Desktop for Windows 2.2.0.0のdocker-composeでエラー
Windows10のdocker desktop for window環境で、docker-composeで起動中のコンテナを操作しようとしたところ、下記エラーが出るようになりました。
> docker-compose exec web /bin/bash Traceback (most recent call last): File "docker-compose", line 6, in <module> File "compose\cli\main.py", line 72, in main File "compose\cli\main.py", line 128, in perform_command File "compose\cli\main.py", line 491, in exec_command File "compose\cli\main.py", line 1469, in call_docker File "subprocess.py", line 172, in call File "subprocess.py", line 394, in __init__ File "subprocess.py", line 644, in _execute_child TypeError: environment can only contain strings [16872] Failed to execute script docker-compose
エラーとなるのは起動後にコンテナ内のコマンドを実行しようとした場合で、
コンテナ起動やapacheなどのサービスの動作は問題ないようです。
原因
docker-composeのバージョン 1.25.2 でエラーが起きる模様です。
別のバージョン(v1.24.1かv1.25.3)を使うことで解決するとの記載がありました。
参考: github.com
docker desktop for windows が更新(v2.2.0.0:2020/1/21リリース)された際にdocker-composeのバージョンも上がり、この問題が発生するようです。
環境
- Windows 10 Pro 1903 (18362.592)
- docker desktop for windows v2.2.0.0 (42247)
- Docker version 19.03.5, build 633a0ea
- docker-compose version 1.25.2, build 698e2846
解決方法
「docker-compose.exe」のバイナリを最新版に置き換えます。
1.「docker-compose v1.25.3」をダウンロード
下記ページの下のほうにある、「docker-compose-Windows-x86_64.exe」をダウンロードします。
Release 1.25.3 · docker/compose · GitHub
2.ダウンロードしたファイル名を「docker-compose.exe」にリネーム
3.「docker-compose.exe」を既存のものと置き換える
リネームした「docker-compose.exe」を既存ファイルに上書きしてください。
デフォルトでは下記フォルダにあるかと思います。
例:C:\Program Files\Docker\Docker\resources\bin\docker-compose.exe
※ 参照先のissueでは対策ファイルへのパスを上書き指定することで対応していますが、実体を上書きしても問題ないと判断し「docker-compose.exe」自信を上書きする手順に変更してあります。
4.動作確認
バージョンが上がっていることを確認します。
> docker-compose -v docker-compose version 1.25.3, build d4d1b42b
無事実行できました。
> docker-compose exec web /bin/bash root@7bf1597be011:/var/www/html#
終わりに
ユーザ数の多いOSSだとメジャーなバグはすぐに報告が上がって対策されるので良いですね。