Dockerでredisを立てるときの注意。
デフォルトの9050ポートをホストにbindしないこと。
ホストポートにアタックを仕掛けられてWarningが乱発する。
asdf ruby でgem install bundler 2.1.4 でそんなバージョンいないよって言われた時
普通にエラーメッセージに、gem update --system 3.2.3 せよ
って書いてあったからやったら治った。
1台のマシンでJenkinsをdocker-composeで立ち上げて自分自身を slaveに追加する
昔々、あるところにUbuntu20.04が動いている1台のNUCがいました。
おじいさんはこんなdocker-compose.ymlを書いてJenkinsおじさんを召喚しました。
version: "3" services: jenkins1: container_name: master image: jenkins/jenkins:lts environment: TZ: Asia/Tokyo ports: - 8080:8080 volumes: - ./jenkins_home:/var/jenkins_home restart: always
さて、これでcrontabで動いてたバッチをJobに移行できるぞい。
しかし、JenkinsのJobを作って実行したところ、/usr/bin/date
がありませんと言われてしまった。
なるほど、Jenkinsコンテナの中でシェルスクリプトを実行してしまってるのか。
じゃあsshするslaveとしてホストマシン自身を追加しよう。そう思ったおじいさんはおもむろにこんなymlを書いてJenkinsコンテナを立ち上げ直したぞ。
- docker-compose.override.yml
version: "3" services: jenkins1: extra_hosts: - "host.docker.internal:host-gateway"
これでコンテナからhost.docker.interna
の名前でホストマシンにsshできるぞい。
無事slaveも追加して、と。
おや、slave起動したらjavaがないと怒られた。
仕方ないホストマシンにjdkインストールじゃ。
sudo apt install default-jdk
再度slaveを起動して、、、、っと。
無事成功じゃ。
こうしておじいさんはJenkinsコンテナとJobが動く1台のNUC環境を手に入れたのでした。
めでたしめでたし。
MySQLでdbのスキーマの差分を比較したい.
開発用ブランチを使っているテスト環境で、migrateに失敗した時に手動解決(schema_migrationsをいじいじとか)したせいで、初回migrate時とバックアップからリストアしたdbで差分が出てしまっているようなのでスキーマだけ比較したくなった。
sqlのdiff用のツールとかもあるが結局以下の方法でdumpしたファイルを見るのが一番早かった。修正は手作業になるが仕方あるまい。
mysqldump -u user -p passwd -h 127.0.0.1 --all-databases --no-data --skip-create-options > schema_dump.sql
これで比較したいdumpファイルを初期状態dbとリストアしたdbの2つ用意して、VSCodeなりなんなりで差分を見ればよい。
以上。
localstackコンテナのdocker-entrypoint-initaws.dの挙動について
以下の設定をしたlocalstackコンテナを立ち上げても、.sh
が実行されないことがある現象に出くわした.
volumes: - ./localstack:/docker-entrypoint-initaws.d
調べた結果initaws.dで実行したsh
内でエラーがあるとそれ以降の処理が継続されないというものだった.
上記機能でコンテナ立ち上げ時にバケットを作成する処理を入れていたのだが、既にバケットが作成済みの場合にalready exitsts
と言われてエラーになるため2度目の起動以降バケット作成処理が走らないという感じである.
ということで以下のようにして同名バケット作成済みの場合はなにもしないようにした.
make_buckets.sh
target_buckets=("bucket1" "bucket2") current_buckets=$(aws s3 ls --endpoint-url=http://localhost:4566) for bucket in "${target_buckets[@]}"; do if [ -z "`echo $current_buckets | grep $bucket`" ]; then aws s3 mb s3://${bucket} --region ap-northeast-1 --endpoint-url http://localhost:4566 echo "s3://${bucket} created." fi done