如何在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文件加载到容器中,然后自动执行。