概要
Windows Docker Desktopは個人では無料だが、ある程度の規模の組織だと有料になる。
この時の回避策としては下記のいずれかになる
Docker CEはtestcontainersから起動しようとすると//./pipe/docker_engine
と表示されてうまく動かなかった。なので、Rauncher Desktop
を使用することとする
Rauncher Desktopの準備
インストール
chocolateyで配布しているのでそれで準備した。10Gb弱となかなか重い。
choco install rancher-desktop
インストールできたら起動しておく
タイムアウト設定
SQLServerは結構重いので pull 時間を延ばしておく。 *
pull.timeout=120
pull.pause.timeout=30
コード
dbをfunctionsの外で定義している環境を想定。このとき、BeforeAllでコンテナを作っては間に合わない
import fs from 'fs';
import { afterAll } from 'vitest';
import { StartedMSSQLServerContainer, MSSQLServerContainer } from '@testcontainers/mssqlserver';
import * as sql from 'mssql';
const mssqlContainer: StartedMSSQLServerContainer = await new MSSQLServerContainer('mcr.microsoft.com/mssql/server:2022-CU13-ubuntu-22.04').withWaitForMessage(/.*Attribute synchronization manager init*/).acceptLicense().withEnvironment({ACCEPT_EULA: 'Y', MSSQL_SA_PASSWORD: 'hoge', MSSQL_PID: 'Developer',MSSQL_COLLATION:'Japanese_CI_AS'}).start();
const connectionString = mssqlContainer.getConnectionUri();
process.env.SQL_CONNECTION_STRING = connectionString;
await sql.connect(connectionString);
await sql.query(fs.readFileSync('./migration.sql','utf8'));
afterAll(async () => {
await mssqlContainer.stop();
});
import { defineWorkspace } from 'vitest/config'
export default defineWorkspace([
{
test:{
env: {TZ:'UTC', SQL_CONNECTION_STRING: ''},
name: 'integration-test',
include: ['**/*.db.test.ts'],
setupFiles: ['test/setupDbContainer.ts'],
deps: { interopDefault: true },
environment: 'node',
// コンテナの起動を含めるためタイムアウトを延長
hookTimeout: 60000,
testTimeout: 60000,
poolOptions: {forks: {singleFork:true}}
}
]);
実行
rauncher desktop用の設定を入れて起動する必要がある
cross-env DOCKER_HOST=unix://${HOME}/.rd/docker.sock TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE=/var/run/docker.sock DEBUG=testcontainers* vitest
参考
使い捨てテストDB環境のtestcontainersをPostgresql + Honoで試してみたメモ
[Windowsにゼロから WSL2 + Docker CE + React環境を構築する全手順]
Rauncher Desktop
Rancher Desktopの使い方|Docker Desktopとの違いや移行手順を解説
sqlserver docker
sqlserver env