我设法创建了一个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:
Mysqlworkbench:
我在这里做错了什么?
评论后进行一些编辑:
似乎在具有卷部分时,您在Docker中创建了卷 当您在特定端口上创建一次卷时,每次您进行docker-compose时,卷都会被重用。对我来说就是这种情况。
已接受答案中的更多详细信息。
答案 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是在卷是干净的情况下调用的脚本。