dqm*_*mis 5 mysql sql database docker docker-compose
我正在尝试设置一个mysql docker容器并执行init sql脚本。不幸的是SQL脚本没有执行。我究竟做错了什么?
version: '3.3'
services:
api:
container_name: 'api'
build: './api'
ports:
- target: 8080
published: 8888
protocol: tcp
mode: host
volumes:
- './api:/go/src/app'
depends_on:
- 'mysql'
mysql:
image: 'mysql:latest'
container_name: 'mysql'
volumes:
- ./db_data:/var/lib/mysql:rw
- ./database/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
restart: always
environment:
MYSQL_USER: test
MYSQL_PASSWORD: test
MYSQL_ROOT_PASSWORD: test
MYSQL_DATABASE: test
ports:
- '3306:3306'
volumes:
db_data:
Run Code Online (Sandbox Code Playgroud)
我执行文件 docker-compose up -d --build
Ivo*_*net 19
该docker-entrypoint-initdb.d文件夹只会在创建(实例化)容器时运行一次,因此您实际上必须执行 adocker-compose down -v以在下次运行时重新激活它。
如果您希望能够随时添加 sql 文件,您可以在此处查看专门的 MySql docker 映像... http://ivo2u.nl/o4
许多容器化的应用程序,尤其是有状态的应用程序,都有一种运行init脚本的方式(例如此处的sql脚本),并且它们只能运行一次。
并且由于它们是有状态的,因此对于容器是否init在容器重新启动时运行脚本而言,卷是事实的来源。
与您的情况类似,删除用于绑定安装的文件夹或使用新的命名卷应重新运行init存在的所有脚本。