gpt4 book ai didi

docker - 如何在 docker-compose.yml 上运行 docker exec

转载 作者:IT老高 更新时间:2023-10-28 21:19:34 25 4
gpt4 key购买 nike

我正在尝试在执行 docker-compose.yml 文件期间创建一个 mysql 数据库模式

  version: "2"
services:
web:
build: docker
ports:
- "8080:8080"

environment:
- MYSQL_ROOT_PASSWORD=root

mysql:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=test

ports:
- "3306:3306"
links:
- web

onrun:
command: "docker exec -i test_mysql_1 mysql -uroot -proot test <dummy1.sql"

我试过 onrun 但这不起作用。我正在构建第一个图像,但从 docker hub 中提取第二个图像。请帮助如何在 docker-compose up 后执行以下命令

最佳答案

docker-compose 中没有像 onrun 这样的东西。它只会调出容器并执行命令。现在你有几个可能的选择

使用mysql镜像初始化

mysql:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=test
volumes:
- ./dummy1.sql:/docker-entrypoint-initdb.d/dummy1.sql
ports:
- "3306:3306"

您可以在容器内的 /docker-entrypoint-initdb.d 中使用您的 sql 文件

使用 bash 脚本

docker-compose up -d
# Give some time for mysql to get up
sleep 20
docker-compose exec mysql mysql -uroot -proot test <dummy1.sql

使用另一个 docker 服务来初始化数据库

version: "2"
services:
web:
build: docker
ports:
- "8080:8080"

environment:
- MYSQL_ROOT_PASSWORD=root

mysql:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=test

ports:
- "3306:3306"
mysqlinit:
image: mysql:latest
volumes:
- ./dummy1.sql:/dump/dummy1.sql
command: bash -c "sleep 20 && mysql -h mysql -uroot -proot test < /dump/dummy1.sql"

你运行另一个服务,它会为你初始化数据库,比如上面的 mysqlinit

关于docker - 如何在 docker-compose.yml 上运行 docker exec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45774221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com