自分の開発環境は Docker Desktop を使っているのですが、最近バージョンアップ(2.2.0.0)したら、docker-compose execを実行しようとすると次のようなエラーが表示されるようになりました。
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 [7760] Failed to execute script docker-compose
これはどうもdocker-composeが読み込む環境ファイル .env の形式に問題があるようです。
自分はdocker-compose.yml は Laravelのトップディレクトリに置いているのですが、このような方式ですと、 docker-compose exec を実行するときLaravelの.envを読み込んでしまい、当然docker-compose用には記述されていませんので、上記のエラーが発生しているようです。
この不具合は最新のdocker-composeでは修正されているのですが、Docker Desktopに同梱されているdocker-composeはまだ古いままです。
しばらくすれば対応されると思いますが、現状の解決方法としましては、次のようにします。
- .env ファイルを .env2 などにリネーム
- docker-compose exec を実行
- .env2 を .envにリネーム
また、別の方法としましては、docker-compose.ymlを別のディレクトリに移して実行しても大丈夫のはずです。
とにかく、早くDocker Desktopがバージョンアップされることを祈ります。