前置き
docker-compose runでdjango環境を構築しようとした際に出たエラーの覚書。
dockerがポートを掴んでいて解放していないという原因もあるが、ホスト側とバッティングしている可能性もある。dockerさんが解放していない場合はdockerの再起動で治る。
発生した現象
> docker-compose run web django-admin.py startproject mysite .
:
(中略)
:
b64ec62ca852: Pull complete
42323e351ef3: Pull complete
Creating mysite.db ...
Pulling db (mysql:5.7)...
Creating hoge.db ... error
ERROR: for hoge.db Cannot start service db: driver failed programming external connectivity on endpoint hoge.db (f683296d4aac32cfe3ca117c6c8464169624860afe875bedccf533d3fa1aa90e): Error starting userland proxy: Bind for 0.0.0.0:3306: unexpected error Permite.db (f683296d4aac32cfe3ca117c6c8464169624860afe875bedccf533d3fa1aa90e): Error starting userland proxy: Bind for 0.0.0.0:3306: unexpected error Permission denied
:
(中略)
:
ERROR: for db Cannot start service db: driver failed programming external connectivity on endpoint hoge.db (48963bd165e4acf284fdef661b0f6b92d4c80bba8e5826804b54294b92eef31d): Error starting userland proxy: Bind for 0.0.0.0:3306: unexpected error Permission denied
ERROR: Encountered errors while bringing up the project.
dockerでdb用のvolumeを作成して、コンテナでvolumeを指定しようとしたら発生。
原因
dbコンテナで指定していたポートがホスト側で使用されていた。
:
ports:
- 3306:3306
:
ホスト側
>netstat -ano|find ":3306"
TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 6692
TCP 0.0.0.0:33060 0.0.0.0:0 LISTENING 6692
TCP [::]:3306 [::]:0 LISTENING 6692
TCP [::]:33060 [::]:0 LISTENING 6692
ホスト側でお試しで入れていたMySQL8.0のポートとバッティングしていたのでアンインストール。
ホスト側を変えたくない場合はdocker-compose側のポートを変えてあげるといい。