1. ホーム
  2. docker

[解決済み】docker-compose.ymlでdocker execを実行する方法

2022-02-08 07:02:58

質問

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を試してみましたが、うまくいきません。 最初のイメージは構築していますが、2番目のイメージはDocker Hubから引っ張ってきています。 docker-composeの後、以下のコマンドを実行する方法を教えてください。

解決方法を教えてください。

のようなものはありません。 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"

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サービスを使って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"

のように、DBを初期化する別のサービスを実行します。 mysqlinit 上記のものでは