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

为什么docker compose使用错误的名称创建mysql容器?,mysql,docker,docker-compose,Mysql,Docker,Docker Compose,我已经成功地创建了一个MySQL和PHP容器,执行了我的脚本,所有的表都在那里 但是,我有一个数据库,我称之为myDb,还有一个用户称为someuser,当出于某种原因创建数据库时,数据库的名称是somedatabase my docker-compose.yaml文件: services: mysql: image: mysql:latest ports: - 3307:3306 environment: MYSQL_DATABASE: my

我已经成功地创建了一个MySQL和PHP容器,执行了我的脚本,所有的表都在那里

但是,我有一个数据库,我称之为myDb,还有一个用户称为someuser,当出于某种原因创建数据库时,数据库的名称是somedatabase

my 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:

Mysqlworkbench:

我做错了什么

在评论之后进行一点编辑:

看起来,当拥有卷部分时,您可以在docker中创建卷 当您在特定端口上创建一个卷时,它会在每次执行docker compose时重新使用。我就是这样


更多详细信息,请参阅已接受的答案。

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

当您从同一个compose文件停止和启动数据库时,卷始终是相同的,因此您希望即使在应用程序重新启动后数据也能保持不变

要强制重新初始化数据,如果不再需要该数据库,可以大量删除该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

编辑:
除非您更改自己的入口点并重建映像以强制它根据您要传递的环境初始化您的DB,即使卷不干净,我想到的唯一选项是手动创建新DB。是跳过数据库重新初始化的条件,是在卷干净时调用的脚本。

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

当您从同一个compose文件停止和启动数据库时,卷始终是相同的,因此您希望即使在应用程序重新启动后数据也能保持不变

要强制重新初始化数据,如果不再需要该数据库,可以大量删除该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

编辑:
除非您更改自己的入口点并重建映像以强制它根据您要传递的环境初始化您的DB,即使卷不干净,我想到的唯一选项是手动创建新DB。是跳过数据库重新初始化的条件,是在卷干净时调用的脚本。

能否共享docker compose up命令的日志?特别是mysql容器日志。@NeoAnderson请查看编辑我猜您正在组成同一个数据库,其中包含以前运行的旧somedatabase。您是否可以检查一行内容,如init.sh executed或相反,该卷已包含数据…跳过DB初始化?我将尝试重现我认为只有当卷为空时才会创建MYSQL_数据库中命名的数据库。因此,如果您有能力丢失这些数据,只需删除Docker卷,它就会重新创建数据库。显然,您必须运行迁移并重新填充表。您可以共享Docker compose up命令的日志吗?特别是mysql容器日志。@NeoAnderson请查看编辑我猜您正在组成同一个数据库,其中包含以前运行的旧somedatabase。您是否可以检查一行内容,如init.sh executed或相反,该卷已包含数据…跳过DB初始化?我将尝试重现我认为只有当卷为空时才会创建MYSQL_数据库中命名的数据库。因此,如果您有能力丢失这些数据,只需删除Docker卷,它就会重新创建数据库。显然,您必须运行迁移并重新填充表。我会尝试一下。这将擦除您当前的数据库!只有当你不再需要那个DBOmg的时候才去做…为什么你不早点告诉我这个…我可怜的db…哈哈。多谢了,这就成功了。@CodingLittle,我通常不使用粗体,但在这里我觉得我必须在帖子中这样做:。有人盲目复制粘贴的风险是真实存在的:我会尝试一下。这将擦除您当前的数据库!只有当你不再需要那个DBOmg的时候才去做…为什么你不早点告诉我这个…我可怜的db…哈哈。多谢了,这就成功了。@CodingLittle,我通常不使用粗体,但在这里我觉得我必须在帖子中这样做:。有人盲目复制粘贴的风险是真实存在的: