[英]How can I initialize a database with some tables in a container using docker compose?
I have my db service:我有我的数据库服务:
...
mysql-server:
container_name: silos-database
init: true
restart: always
build:
context: .
dockerfile: Dockerfile-db
environment:
- MYSQL_ROOT_PASSWORD=${ROOT_PASSWORD}
- MYSQL_DATABASE=${DATABASE}
- MYSQL_USER=${USER}
- MYSQL_PASSWORD=${USER_PASSWORD}
ports:
- target: 3036
published: 3036
networks:
- backend-net
volumes:
- type: volume
source: db_vol
target: /var/lib/mysql
...
This is my Dockerfile这是我的 Dockerfile
FROM mysql:latest
The init.sql
file contain same tables that my database must have init.sql
文件包含我的数据库必须具有的相同表
...
-- users data
CREATE TABLE IF NOT EXISTS users (
email VARCHAR(128) PRIMARY KEY,
username VARCHAR(64) UNIQUE,
-- password is SHA256 hashed, so 64 characters
password CHAR(64) NOT NULL
);
CREATE TABLE IF NOT EXISTS sessions (
email VARCHAR(128) PRIMARY KEY,
token TEXT NOT NULL,
expireDate BIGINT(13) NOT NULL,
FOREIGN KEY (email) REFERENCES users(email) ON UPDATE CASCADE ON DELETE CASCADE
);
...
How can I build a service with the content of init.sql
file already inside the service?如何使用服务中已有的
init.sql
文件的内容构建服务?
The simplest way would be to add init.sql
file to Your docker image:最简单的方法是将
init.sql
文件添加到您的 docker 图像中:
FROM mysql:latest
ADD init.sql /docker-entrypoint-initdb.d
If You want to provide init.sql
during container start instead of build time, You can mount directory containing init.sql
into container:如果您想在容器启动而不是构建时提供
init.sql
,您可以将包含init.sql
的目录挂载到容器中:
mysql-server:
container_name: silos-database
init: true
restart: always
build:
context: .
dockerfile: Dockerfile-db
environment:
- MYSQL_ROOT_PASSWORD=${ROOT_PASSWORD}
- MYSQL_DATABASE=${DATABASE}
- MYSQL_USER=${USER}
- MYSQL_PASSWORD=${USER_PASSWORD}
ports:
- target: 3036
published: 3036
networks:
- backend-net
volumes:
- type: volume
source: db_vol
target: /var/lib/mysql
- /local/path/with/initsql:/docker-entrypoint-initdb.d
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.