sql-migrateをコンテナにインストールできない
Q&A
Closed
解決したいこと
ここに解決したい内容を記載してください。
例)
sql-migrationのインストールエラー、コマンド実行ができません。
以下の記事に準拠して進めた。
https://qiita.com/rin1208/items/56fde6355127761c0c6b
M1Macを使用しているためdocker-compose.yamlは以下のようにした。
version: '3.7'
services:
api:
build: .
ports:
- "8080:8080"
tty: true
volumes:
- ./:/migrations
working_dir: /migrations
environment:
- MYSQL_USER=${USERNAME}
- MYSQL_PASSWORD=${USERPASS}
- MYSQL_HOST=${HOSTNAME}
- MYSQL_PORT=${PORTNUMBER}
- MYSQL_DATABASE=${DATABASENAME}
mysql:
image: mysql:5.7
platform: linux/x86_64
restart: always
environment:
- MYSQL_ROOT_PASSWORD=${ROOTPASS}
- MYSQL_DATABASE=${DATABASENAME}
command: >
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--innodb_file_per_table
--innodb_file_format=BARRACUDA
--innodb_large_prefix=1
--innodb_use_native_aio=0
phpmyadmin:
platform: linux/x86_64
image: phpmyadmin
ports:
- 8000:80
environment:
- PMA_HOST=${PHOSTNAME}
- PMA_PASSWORD=${PPASS}
- PMA_USER=${PUSERNAME}
- PMA_ARBITRAY=${PARBITRAY}
インストールされているGoのバージョンに合わせてDockerfileを記述した。
FROM golang:1.20
RUN go install github.com/rubenv/sql-migrate/...@latest
For Go version from 1.18, use:
go install github.com/rubenv/sql-migrate/...@latest
マイグレーションファイルを以下のように変更した
-- +migrate Up
CREATE TABLE IF NOT EXISTS PopTbl
(pref_name VARCHAR(32) PRIMARY KEY,
population INTEGER NOT NULL);
INSERT INTO PopTbl VALUES('徳島', 100);
INSERT INTO PopTbl VALUES('香川', 200);
INSERT INTO PopTbl VALUES('愛媛', 150);
INSERT INTO PopTbl VALUES('高知', 200);
INSERT INTO PopTbl VALUES('福岡', 300);
INSERT INTO PopTbl VALUES('佐賀', 100);
INSERT INTO PopTbl VALUES('長崎', 200);
INSERT INTO PopTbl VALUES('東京', 400);
INSERT INTO PopTbl VALUES('群馬', 50);
-- +migrate Down
DROP TABLE IF EXISTS PopTbl;
発生している問題・エラー
参考にした記事、最後のコマンド入力が通らず以下のようなエラーになる。
docker-compose exec api bash -c "sql-migrate up"
bash: sql-migrate: command not found
自分で試したこと
問題の切り分け
・MySQLは起動しているかどうか
・phpmyadminは起動しているかどうか
→MySQLは直接確認していないが、phpmyadminは立ち上がっていて、指定したテーブルの項目ができている。
→services:apiの問題
docker-compose exec api bash
でコンテナに手動で入り、sql-migrationをインストールしようと試みたが、パッケージが見つからないと弾かれた。
go install github.com/rubenv/sql-migrate/...@latest
warning: "github.com/rubenv/sql-migrate/...@latest" matched no packages
go version
go version go1.2.2 linux/amd64
go get -v github.com/rubenv/sql-migrate/...
(インストール失敗)
コンテナ環境のGoのversionが、Dockerfileで指定していたはずの1.20ではなく1.2となっていた。
キャッシュを消去してコンテナを再起動させてみた。
docker-compose build --no-cache
docker-compose down
docker-compose up
(sql-migrateのインストールには成功)
docker-compose exec api bash -c "sql-migrate up"
(しかしmigrationには失敗する)
Applied 0 migrations