会社では、laravel + postgres のプロジェクトがあり、今まで Homestad を使用していたが、M1 使用者が増えてきたので、Docker 化をする必要があった。
Docker はデフォルトで localhost が割り当てられる。
初めは、 nginx-proxy
(リバースプロキシ)でポート番号をプロジェクトごとで分けて、対応しようと思った。
問題
プロジェクトごとでポートが被らないようにポート番号を考えるのがめんどくさい。
だからプロジェクト毎にIPアドレス割り当てようと考えた。
docker-compose.yaml
version: '3'
services:
app:
build: ./docker/app
ports:
- '${DOCKER_HOST:-127.0.0.1}:${APP_PORT:-80}:80'
environment:
VIRTUAL_HOST: 'domein.jp'
volumes:
- '.:/var/www/html'
depends_on:
- db
- mailhog
tty: true #永続起動する設定
db:
image: 'postgres:9.6'
ports:
- '${DOCKER_HOST:-127.0.0.1}:${DB_PORT:-5432}:5432'
environment:
PGPASSWORD: '${DB_PASSWORD:-secret}'
POSTGRES_DB: '${DB_DATABASE}'
POSTGRES_USER: '${DB_USERNAME}'
POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}'
volumes:
- 'db:/var/lib/postgresql/data'
- .:/laravel
mailhog:
image: 'mailhog/mailhog:latest'
ports:
- '${DOCKER_HOST}:8025:8025'
volumes:
db:
.env
DOCKER_HOST=127.0.0.3
APP_PORT=80
DB_PORT=secret
DB_DATABASE=laravel
DB_USERNAME=postgres
DB_PASSWORD=secret
上記のように設定して、docker-composer up -d
を実行したところ以下エラーが出た。
Error response from daemon: Ports are not available: listen tcp 127.0.0.3:8025: bind: can't assign requested address
解決方法
MAC OS ではデフォルトでは 127.*.*.*
は使用できないらしい。
そのため、以下コマンドで使用できるようにする必要があった。
sudo ifconfig lo0 alias 127.0.0.3 up
.zshrc や config.fish などで起動時に有効にするようにすれば、毎回やる必要はなくなる。
.zshrc
for ((i=2;i<256;i++))
do
sudo ifconfig lo0 alias 127.0.0.$i up
done
config.fish
for i in (seq 255); sudo ifconfig lo0 alias 127.0.0.$i up; end
関連