我有一个data.sql
文件在同一个文件夹中作为Dockerfile
和docker-compose.yml
文件。我想当第一次容器是用mysql映像构建的时候,写在我的data.sql
文件中的命令应该执行。
在data.sql
中,我有:
create database db1;
create database db2;
create database db3;
create database db4;
GRANT ALL PRIVILEGES on db1.* to 'NORMAL_USER'@'%';
GRANT ALL PRIVILEGES on db2.* to 'NORMAL_USER'@'%';
GRANT ALL PRIVILEGES on db3.* to 'NORMAL_USER'@'%';
GRANT ALL PRIVILEGES on db4.* to 'NORMAL_USER'@'%';
在Dockerfile
中我写了:
ADD data.sql data.sql
在docker-compose.yml
文件中,我写了:
version: '3.3'
services:
mysql:
container_name: mysql
image: mysql
build:
dockerfile: ./Dockerfile
environment:
MYSQL_ROOT_PASSWORD: ROOT_USER_PASS
MYSQL_USER: NORMAL_USER
MYSQL_PASSWORD: NORMAL_USER_PASS
ports:
- "5000:3306"
networks:
- internal_net
volumes:
- mysql
restart: unless-stopped
networks:
internal_net:
driver: bridge
volumes:
mysql:
1条答案
按热度按时间c2e8gylq1#
在开始添加此功能之前,我们需要
docker-compose.yml
中的当前错误:卷mysql
需要一个装载位置。我怀疑它应该作为数据目录装载到/var/lib/mysql
。如果它应该装载到其他位置,请更正路径:hub.docker.com
page of the MySQL container在初始化新示例下指出:第一次启动容器时,将创建一个具有指定名称的新数据库,并使用提供的配置变量进行初始化。此外,它将执行扩展名为
.sh
、.sql
和.sql.gz
的文件,这些文件在/docker-entrypoint-initdb.d
中找到。文件将按字母顺序执行...该脚本只在data目录(默认为
/var/lib/mysql
)中找不到数据时才执行,因此,我们可以简单地通过volume
(docs.docker.com
)将data.sql
挂载到该目录: