動機
とある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の両方を設定するのがミソですね