как делать миграции не заходя в контейнер?
Всем привет, я продолжаю постигать докер. В этот раз не могу понять, как увязать mysql в контейнере и тот, что стоит у меня на компе. А теперь по порядку. Через боль и страдания я всё-таки смог создать проект laravel на docker, у которого стабильно работают все контейнеры и ничего даже почти не отваливается. Вот, собственно часть docker-compose с контейнером БД:
db:
image: mysql:8.0.33
restart: always
volumes:
- ./tmp/db:/var/lib/mysql
environment:
MYSQL_DATABASE: dockervel
MYSQL_ROOT_PASSWORD: root
ports:
- 8880:3306
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
container_name: project_db
А вот файл .env с настройками подключения к БД
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=dockervel
DB_USERNAME=root
DB_PASSWORD=root
И всё вроде бы работает неплохо, но есть нюанс: когда я пытаюсь сделать миграцию, мне приходится заходить в контейнер приложения и делать её оттуда, а потом с помощью sudo chmod 777 -R ./ настраивать права доступа, чтобы я в этой самой миграции мог хоть что-то изменить. В противном случае (если я пытаюсь сделать миграцию не заходя в контейнер) я получаю следующую ошибку:
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for db failed: Name or service not known (Connection: mysql, SQL: select * from information_schema.tables where table_schema = dockervel and table_name = migrations and table_type = 'BASE TABLE')
Это ужасно не удобно и мне с трудом верится, что хоть один уважающий себя прграммист выполняет эту нехитрую, но весьма утомляющую махинацию каждый раз, когда хочет создать новую миграцию. А отсюда собственно напрашивается мой вопрос: что и как я могу сделать, чтобы создавать миграции не заходя в контейнер? Версии mysql, которые установлены на моём компьютере и в контейнере совпадают.
UPD: Dockerfile:
FROM php:8.1-fpm
RUN apt-get update && apt-get install -y \
apt-utils \
libpq-dev \
libpng-dev \
libzip-dev \
zip unzip \
git && \
docker-php-ext-install pdo_mysql && \
docker-php-ext-install bcmath && \
docker-php-ext-install gd && \
docker-php-ext-install zip && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
COPY ./_docker/app/php.ini /usr/local/etc/php/conf.d/php.ini
# Install composer
ENV COMPOSER_ALLOW_SUPERUSER=1
RUN curl -sS https://getcomposer.org/installer | php -- \
--filename=composer \
--install-dir=/usr/local/bin
WORKDIR /var/www
docker-compose.yml
version: '3'
services:
nginx:
image: nginx:latest
volumes:
- ./:/var/www/
- ./_docker/nginx/conf.d/:/etc/nginx/conf.d/
ports:
- 8800:80
depends_on:
- app
container_name: project_nginx
app:
build:
context: .
dockerfile: _docker/app/Dockerfile
volumes:
- ./:/var/www/
depends_on:
- db
container_name: project_app
db:
image: mysql:8.0.33
restart: always
volumes:
- ./tmp/db:/var/lib/mysql
environment:
MYSQL_DATABASE: dockervel
MYSQL_ROOT_PASSWORD: root
ports:
- 8880:3306
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
container_name: project_db