如何在docker-compose.yml上运行docker exec
我想在docker-compose.yml文件执行期间创build一个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"
我试过运行,但这不起作用。 我正在构build第一个图像,但从docker中心拉第二个图像。 请在docker-compose之后,好好的帮助你如何执行下面的命令
在onrun
docker-compose
没有像onrun
这样的onrun
。 它只会调出容器并执行命令。 现在你有几个可能的select
使用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"
你可以将你的sql文件放在容器内的/docker-entrypoint-initdb.d
里面
使用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
首次启动容器时,将使用提供的configurationvariables创build并初始化具有指定名称的新数据库。 此外,它将执行在/docker-entrypoint-initdb.d中find的具有扩展名.sh,.sql和.sql.gz的文件。 文件将按字母顺序执行。
从https://hub.docker.com/_/mysql/
这是多less个数据库(postgresql,mysql,…)在容器创build时自行初始化的便捷方式。 您应该创build一个* .sql / * .sh文件,并通过卷将其绑定到新的容器中:
db: image: mysql:latest volumes: - ./db/entrypoint:/docker-entrypoint-initdb.d environment: - MYSQL_ROOT_PASSWORD=iamgroot - MYSQL_DATABASE=gotg
这将所有的sql / sh文件加载到容器中,然后自动执行。