如何将 laravel 应用程序从 docker 容器内部迁移到容器外部的 mysql 数据库?

分享于2022年07月17日 docker laravel mysql php 问答
【问题标题】:如何将 laravel 应用程序从 docker 容器内部迁移到容器外部的 mysql 数据库?(How to migrate laravel app from inside docker container to a mysql database outside the container?)
【发布时间】:2022-01-25 03:30:51
【问题描述】:

如何从 mysql-server 部署在另一个容器中的 docker 容器进行 php artisan 迁移

这里是 laravel 应用的 Dockerfile

FROM php:7.2.19-fpm
FROM composer
FROM octava/php7.4-mysql5.7
RUN mkdir /usr/src/REST-API/
WORKDIR /usr/src/REST-API
COPY . /usr/src/REST-API
RUN cd /usr/src/REST-API
RUN cat .env
RUN composer install
CMD php artisan serve --host 0.0.0.0

我使用 mysql/mysql-server:latest 作为数据库容器并运行了这个命令:

sudo docker run --name=mysql3.0 -dp 3309:3306 mysql/mysql-server

我的环境文件是

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3309

当我从 容器? 照亮\数据库\查询异常

  SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (SQL: select * from information_schema.tables where table_schema = devices and table_name = migrations and table_type = 'BASE TABLE')


【解决方案1】:

您可以在 docker 中创建一个新网络并将这 2 个容器(php 和 mysql)添加到该网络,以便它们可以看到彼此。 基本上,您在 .env 文件中指向 DB_HOST ,运行 Laravel 应用程序的容器应该可以访问它。如果它们在同一个网络上,它可能类似于 serverIp:dbPort 或设置为本地 IP。
创建一个新的网络运行:

docker network create -d bridge myNetwork

要将容器连接到网络运行:

docker network connect myNetwork containerName

请参阅 here 在 Docker 中创建网络以及 here 以将容器连接到网络