0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Docker-ComposeでMySQL8をセットアップする時に若干はまったこと

Posted at

はじめに

Gitbucketの組み込みDBであるH2Databaseはたまに壊れる事があるとのことで、ちゃんと運用するにはMySQLかPostgreSQLサーバを建てた方がよいとのこと。
GitbucketもMySQLも公式Dockerイメージから構築しようとした時に、ややハマった部分と対応作を備忘録する。

結論

一端、これでうまいこといっているので、良しとする。

# Docker-Composeのバージョンが低いのは、Portainerがまだバージョン2までしか対応していないため。特に意味はない
version: '2'
services:
  #MySQLの設定
  mysql:
    image: mysql
    container_name: gitbucket_mysql
    ports:
      - 3306:3306
      - 33060:33060
    environment:
      MYSQL_ROOT_PASSWORD: your_password
      MYSQL_DATABASE: gitbucket
      MYSQL_USER: gitbucket
      MYSQL_PASSWORD: gitbucket
    volumes:
      - mysql:/var/lib/mysql
    # ポイント1 キャラクタセットの設定、ポイント2 認証プラグインの変更
    command: ["--character-set-server=utf8mb4",  "--collation-server=utf8mb4_unicode_ci", "--default-authentication-plugin=mysql_native_password"]

  gitbucket:
    image: gitbucket/gitbucket
    container_name: gitbucket
    depends_on:
      - mysql
    ports:
      - 8080:8080
    environment:
      GITBUCKET_DB_URL: jdbc:mysql://gitbucket_mysql:3306/gitbucket?useUnicode=true&characterEncoding=utf8
      GITBUCKET_DB_USER: gitbucket
      GITBUCKET_DB_PASSWORD: gitbucket
    volumes:
     - gitbucket:/gitbucket
    # ポイント3 MySQLが立ち上がるのをちょっとだけ待つ
    command: ["sh", "-c", "sleep 10 && java -jar /opt/gitbucket.war"]
    
volumes:
  mysql:
    driver_opts:
      type: none
      device: /PATH/TO/MOUNT/DIR/mysql
      o: bind
  gitbucket:
    driver_opts:
      type: none
      device: /PATH/TO/MOUNT/DIR/gitbucket
      o: bind


ポイント1 MySQL キャラクタセットの指定

command: ["--character-set-server=utf8mb4",  "--collation-server=utf8mb4_unicode_ci", "--default-authentication-plugin=mysql_native_password"]

別にはまったわけではないが、MySQLのサーバ側のキャラセットを設定ファイル(my.cnf)なしで変更したかったので、起動パラメータでUTF8に指定した。

ポイント2 MySQL 認証プラグインの変更

command: ["--character-set-server=utf8mb4",  "--collation-server=utf8mb4_unicode_ci", "--default-authentication-plugin=mysql_native_password"]

MySQL8以降、標準の認証方式がRSA認証になったようなので、旧式のパスワード認証に変更する。新式の認証方法はGitbucket側が対応していなければならないが、現段階でWikiを見る限りまだ未対応?の模様。(ただ、ブログを見る限りMySQL8対応をされているようだが)

ポイント3 Gitbucket起動時にウェイトタイム設ける

command: ["sh", "-c", "sleep 10 && java -jar /opt/gitbucket.war"]

これが、一番はまった。

MySQLの初回立ち上がり時、まだデータベースがないので起動後すぐには接続できない。Docker-Composeで立ち上げるとGitbucket起動後もまだMySQLが準備中の段階。そのため、Gitbucket側で接続エラーになってしまう。

MySQLのDockerHubのDescribeにも記載されているが、こういった場合はシェルなどで接続リトライをするようにしている。

ちょっとダサいのはやむを得ないが、接続リトライとか面倒なので、てっとり早くウェイトタイム10秒をいれた。(10秒もいらんかも)

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?