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

raj*_*j19 13 docker docker-compose

我试图在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"
Run Code Online (Sandbox Code Playgroud)

我试过onrun,但这不起作用.我正在构建第一张图片,但从docker hub中拉出第二张图片.请熟悉如何在docker-compose之后执行以下命令

Tar*_*ani 23

没有什么比这更好的onrundocker-compose.它只会调出容器并执行命令.现在你几乎没有选择

使用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"
Run Code Online (Sandbox Code Playgroud)

你可以将你的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
Run Code Online (Sandbox Code Playgroud)

使用其他docker服务初始化DB

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"
Run Code Online (Sandbox Code Playgroud)

你运行另一个服务,它将为你启动数据库,就像mysqlinit上面的那个


n2o*_*n2o 6

当容器第一次启动时,将使用提供的配置变量创建和初始化具有指定名称的新数据库。此外,它将执行在 /docker-entrypoint-initdb.d 中找到的扩展名为 .sh、.sql 和 .sql.gz 的文件。文件将按字母顺序执行。

来自https://hub.docker.com/_/mysql/

这是在容器创建时有多少数据库(postgresql、mysql 等)初始化自己的便捷方式。您应该创建一个 *.sql /*.sh 文件并通过将其绑定到新容器中:

db:
  image: mysql:latest
  volumes: 
    - ./db/entrypoint:/docker-entrypoint-initdb.d
  environment:
    - MYSQL_ROOT_PASSWORD=iamgroot
    - MYSQL_DATABASE=gotg
Run Code Online (Sandbox Code Playgroud)

这会将所有 sql / sh 文件加载到容器中,然后自动执行。