2021/12/10
はじめに
Docker を使っていて,謎のaddress already in use
が吐き出され,docker ps
で確認してもコンテナが起動していないという事象が発生した.
エラーの全体を見ると,何のコンテナを建てようがエラーは起こると思われるが,今回の私の例では PostgreSQL コンテナで発生した.
何が起こっているのか?
address already in use
の通り,「アドレスが既に使われていますよー」という状態である.
確認する
私の場合 PostgreSQL で発生したためポートが5432
であった.そのため,以下のコマンドでポートの仕様状況を確認する.
$ netstat -pna | grep 5432
この結果,PostgreSQL がポートを使用していることが分かった.
Docker とは別で以前インストールしていた PostgreSQL が起動していて,ポートを使用していたためエラーが出ていた.
一瞬で解決する(一時的)
このような問題を解決するためにやるべきことは,「PostgreSQL を停止する」に尽きる.そこで,以下のコマンドを実行すると停止出来るため,コンテナが起動できる.
$ systemctl stop postgresql
上述の問題における問題点
一時的にpostgresql
を停止してポートを開放したためコンテナは起動されたが,OS 起動時に自動起動の設定になっている場合,再起動したら再度ポートが使えなくなる.
その都度postgresql
を停止するのは非常に面倒である.
そこで,私の場合ローカルでは開発用途でしか PostgreSQL を使わないため,通常インストールされた PostgreSQL をアンインストールすることにした.
永続的な解決策
!!! PostgreSQL のアンインストールに伴ってデータが消失する可能性があります.自己責任でお願いします!!!
$ sudo apt purge postgresql
$ sudo apt remove --purge postgressql-*
$ sudo userdel postgres
ちなみに,sudo apt install postgresql
のみでは自動起動が行われてしまい,出来なかった.
おわりに
やっぱり Docker で走らせたほうがいいな〜