为什么docker compose用错误的名称创建mysql容器?

时间:2020-08-27 13:42:13

标签: mysql docker docker-compose

我设法创建了一个MySQL和PHP容器,并且执行了脚本并且所有表都在那里。

但是,我有一个名为“ myDb”的数据库和一个名为“ someuser”的用户,并且由于某种原因创建数据库时,数据库的名称为“ somedatabase”

我的docker-compose.yaml文件:

services:
  mysql:
    image: mysql:latest
    ports:
      - 3307:3306
    environment:
      MYSQL_DATABASE: myDb
      MYSQL_ROOT_PASSWORD: SomeRootPassword1!
      MYSQL_USER: someuser
      MYSQL_PASSWORD: Password1!
    volumes:
      - ./dbScript/winit_Script2.sql:/docker-entrypoint-initdb.d/winit_Script2.sql
      - db_data:/var/lib/mysql
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: dev_pma
    links:
      - mysql
    environment:
      PMA_HOST: mysql
      PMA_PORT: 3307
      PMA_ARBITRARY: 1
    restart: always
    ports:
      - 8183:80

volumes:
  db_data:

phpAdmin:

enter image description here

Mysqlworkbench:

enter image description here

我在这里做错了什么?

评论后进行一些编辑:

似乎在具有卷部分时,您在Docker中创建了卷 当您在特定端口上创建一次卷时,每次您进行docker-compose时,卷都会被重用。对我来说就是这种情况。

已接受答案中的更多详细信息。

1 个答案:

答案 0 :(得分:3)

如果卷不干净,则mysql映像不会初始化数据库。

从相同的撰写文件停止和启动数据库时,卷始终是相同的,因此,即使在应用程序重启后,您也希望数据能够持久保存。

要强制重新初始化数据,可以删除该docker卷(仅在不再需要该数据库时才可以!这无法撤消):

首先,停止并删除容器。

然后列出并删除保留数据库的卷:

docker volume ls
DRIVER              VOLUME NAME
local               <your-deployment-name>_db_data


docker volume rm <your-deployment-name>_db_data

然后再次运行docker-compose up命令,您将能够在phpMyAdmin中找到myDb而不是somedb


修改:
除非您更改自己的entrypoint并重建映像以强制其根据您传递的ENV初始化数据库,即使卷不干净,我想到的唯一选择就是创建新映像。手动数据库。 Here是跳过DB的重新初始化的条件,而here是在卷是干净的情况下调用的脚本。