Docker中的MySQL显示不同的数据库

0qx6xfy6  于 2023-08-02  发布在  Mysql
关注(0)|答案(1)|浏览(118)

我目前正在学习laravel和docker。我之前安装了MySQL,想用docker和adminer运行服务器,下面是docker-compose.yml

version: "3.9"
services:
  mysql:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
    ports:
      - 3306:3306
  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

字符串
我可以成功地登录到localhost:8080并能够在adminer中创建新的数据库。但问题是,我不能在本地安装MySQL从我以前的项目数据库。
我想在docker中连接MySQL数据库(或目录),因此它指的是我计算机中安装的MySQL。
我运行了服务器,并尝试使用php artisan migrate与数据库名称aan从cli迁移,它创建了新的数据库。但是,数据库并没有显示在docker中。
这是cli和dbeaver的输出

mysql> SHOW DATABASES
    -> ;
+--------------------+
| Database           |
+--------------------+
| aan                |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql>


的数据
这是adminer中的数据库(我也尝试在adminer中创建test1,但它没有显示在cli中)


编辑1:

对不起,我没有足够的声誉点后,而不是链接的图像量

kupeojn6

kupeojn61#

要在docker容器上持久化数据,可以使用绑定挂载。这意味着您将从容器中的localhost挂载一个目录。在你的例子中,如果你绑定mount /path/to/local/directory/mysql/var/lib/mysql,你可以在mysql容器删除/创建之间持久化mysql数据。

services:
  mysql:
    image: mysql
    volumes:
      - type: bind
        source: /path/to/local/directory/mysql
        target: /var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
    ports:
      - 3306:3306
  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

字符串
另一个问题,似乎你有在评论中提到,你似乎有一个mysql服务运行在您的本地pc上。为了使用相同的端口,你需要停止本地mysql服务,然后执行docker-compose up,或者你需要在docker-compose.yml中更改本地端口:

services:
  mysql:
    image: mysql
    volumes:
      - type: bind
        source: /path/to/local/directory/mysql
        target: /var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
    ports:
      - 3307:3306
  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080


现在有了新的docker-compose.yml,容器中的mysql服务将在localhost:3307上可用。你只需要配置你的项目在那个主机/端口组合上连接到mysql,然后再次执行migrate命令。

相关问题