我有一个 docker-compose 文件
version: '3.7'
services:
db:
image: mysql:latest
container_name: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 12345
volumes:
- ./docker/db:/docker-entrypoint-initdb.d
ports:
- "3306:3306"
以及一个用于初始化数据库的 MySQL 脚本。
CREATE DATABASE `aaa`;
USE `aaa`;
CREATE TABLE `building` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) NOT NULL,
`start_date` date DEFAULT NULL,
`end_date` date DEFAULT NULL,
`open` tinyint(4) DEFAULT NULL,
`address_type` varchar(30) DEFAULT NULL,
`address_name` varchar(45) DEFAULT NULL,
`address_number` varchar(45) DEFAULT NULL,
`cap` char(5) DEFAULT NULL,
`city` varchar(45) DEFAULT NULL,
`province` varchar(45) DEFAULT NULL,
`state` varchar(45) DEFAULT NULL,
`req_amount` float DEFAULT NULL,
PRIMARY KEY (`id`)
);
实际上 Docker 会忽略文件 INIT_DB.SQL,如下所示:
mysql | /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/DB_INIT.SQL
我想用该文件初始化数据库。我也尝试过:使用 docker-compose.yml tomcat + mysql + war。
哪里错了?
db:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
ports:
- "3306:3306"
environment:
TZ: "America/Halifax"
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: formulary
volumes:
- ./mysql-init.sql:/docker-entrypoint-initdb.d/mysql-init.sql
- ./mysql.cnf:/etc/mysql/conf.d/mysql.cnf
你放的和我放的唯一区别是我放的是源文件/目标文件(不仅仅是目录)。另外,您确定 ./docker/db 包含您的文件吗?
postgres:
volumes:
- ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d/
FROM mysql:latest
RUN mkdir -p /docker-entrypoint-initdb.d/
其次,更新docker-compose:
version: '3.7'
services:
db:
build:
context: .
dockerfile: ./db/Dockerfile
container_name: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 12345
volumes:
- ./docker/db:/docker-entrypoint-initdb.d/
ports:
- "3306:3306"
它对我有用。