動機
とあるdocker-compose.ymlで立ち上げたサービスから、新たに別のdocker-compose.ymlで立ち上げたGitBucketのリポジトリへ接続する際に少し手間取ったので、備忘録として
コンテナ間通信については本記事で紹介する方法の他にhost.docker.internal
を利用するものもあるようですが、ここでは触れません
環境
WSL2 Ubuntu24.04 LTS
Docker 及び Docker compose plugin
本題
GitBucketの立ち上げ準備
殆どは以下の記事の通りです
DockerhubにあるGitBucketのイメージは更新されていないので、最新版を使用するためにはDockerfileからイメージをビルドする必要があります
GitBucketのDockerfile
FROM tomcat:10-jre11
ADD https://github.com/gitbucket/gitbucket/releases/download/4.41.0/gitbucket.war /opt/gitbucket.war
EXPOSE 8080 29418
CMD ["java", "-jar", "/opt/gitbucket.war"]
-
使用するGitBucketのバージョンに合わせて以下の記述を適宜変更してください。
FROM tomcat:10-jre11
ADD https://github.com/gitbucket/gitbucket/releases/download/4.41.0/gitbucket.war
-
Dockerfileの準備が終わったら
docker build
でイメージをビルドします
例:docker build -t gitbucket:4.41.0 ./
GitBucketのdocker-compose.yml
services:
gitbucket:
image: gitbucket:4.41.0
container_name: gitbucket
ports:
- "127.0.0.1:88:8080"
- "127.0.0.1:29418:29418"
volumes:
- "./gitbucket:/root/.gitbucket"
restart: no
networks:
- git_network
networks:
git_network:
external: true
- imageには先ほどビルドしたイメージを指定します
- volumesの記述は
docker-compose.yml
のある./
以下にgitbucket
ディレクトリを作成し、コンテナ内の/root/.gitbucket
へのバインドマウントを行うことを意味しています - networksでは、あらかじめ作成するdocker networkを指定します。ネットワークの名前はどのようなものでも構いませんが、今回は
git_network
としています
ネットワーク作成のコマンド例:docker network create git_network
これは異なる
docker-compose.yml
を跨いで通信を行うために必要な設定となります。今回gitbucketのリポジトリへ接続するサービスの例として、同一のgit_network
を設定したappsmithのdocker-compose.yml
を示します
appsmithのdocker-compose.yml
services:
appsmith:
image: index.docker.io/appsmith/appsmith-ce:v1.26
container_name: appsmith
ports:
- "127.0.0.1:80:80"
- "127.0.0.1:443:443"
volumes:
- ./stacks:/appsmith-stacks
restart: unless-stopped
networks:
- git_network
networks:
git_network:
external: true
gitbucketの立ち上げ・設定
docker-compose.yml
の準備が整ったら、docker compose up -d
でコンテナを立ち上げます
上記の設定のままであれば、ブラウザでlocalhost:88
へと接続すると、GitBucketの管理画面が表示されると思いますのでroot
でログインしてください。以降はGitBucket管理画面上の操作になります
各記述のポートやホスト名(サービス名)は、適宜docker-compose.yml
の設定に合わせて変更してください
- 右上の
System administration
から、System settings
へと遷移する -
Base URLに
http://localhost:88
を設定する -
Integrations
タブで、Enable SSH access to git repositoryにチェックを入れ、SSH bind hostにgitbucket
を、SSH bind portには29418
を設定する - リポジトリを作成し、デプロイキーの登録等を行う
以上の設定を行うことで、docker上の同一ネットワークが設定されたサービスからssh://git@gitbucket:29418/~
でリポジトリへの接続ができるようになります
docker-compose.yml
のネットワークの設定と、サービス名による名前解決が肝で、他は特に気にかけるべきことはありませんね
付記
GitBucketの標準のデータベースはH2ですが、その実PostgreSQL等の利用が推奨されています
以下にPostgreSQLを用いる場合の各種設定の例を示します
GitBucketのdocker-compose.yml
services:
gitbucket:
image: gitbucket:4.41.0
container_name: gitbucket
ports:
- "127.0.0.1:88:8080"
- "127.0.0.1:29418:29418"
restart: no
volumes:
- "./gitbucket:/root/.gitbucket"
depends_on:
git_db:
condition: service_healthy
networks:
- default
- git_network
git_db:
image: postgres:16.2
environment:
POSTGRES_DB: gitbucket
POSTGRES_PASSWORD: gitbucket
POSTGRES_USER: gitbucket
healthcheck:
interval: 10s
retries: 10
test: "pg_isready -U \"$$POSTGRES_USER\" -d \"$$POSTGRES_DB\""
timeout: 2s
restart: no
volumes:
- "./postgres:/var/lib/postgresql/data"
networks:
git_network:
external: true
GitBucketのdatabase.conf
db {
url = "jdbc:postgresql://git_db/gitbucket"
user = "gitbucket"
password = "gitbucket"
}
gitbucket
サービスのnetworksにdefault
とgit_network
の両方を設定するのがミソですね