---
title: "【完全ガイド】Docker ComposeでAIアシスタント環境を構築する方法"
description: "clawdbot(AIチャットアシスタント)をDocker Compose環境で構築する方法を解説。Dockerfile、docker-compose.yml、Makefileの実装例と、非rootユーザー実行やsocat bridge等のセキュリティ設計のポイントを紹介します。"
created: "2026-01-30"
status: "published"
platforms:
wordpress:
published: true
wp_status: "future"
category: "infrastructure"
url: "https://wakatchi.dev/?p=2555"
published_date: "2026-02-08T12:00:00+09:00"
post_id: 2555
slug: "docker-compose-ai-assistant-environment"
tags:
- "Docker Compose"
- "コンテナ"
- "AIアシスタント"
- "zsh"
- "セキュリティ"
- "開発環境"
---

# Docker ComposeでAIアシスタント環境を構築する完全ガイド
Docker Composeを使ってAIアシスタント(clawdbot)の環境を構築する方法を解説します。
このセットアップにより、コンテナ内でclawdbotを実行し、Telegram/Slack等のプラットフォームと連携できるようになります。
実装の主な特徴は以下の通りです。
- **Dockerfile**: node:22-slimベースのコンテナイメージ(zsh、vim、git、curlを含む)
- **docker-compose.yml**: サービス定義とボリューム/ポート設定
- **Makefile**: コンテナ操作のショートカットコマンド(login, up, down, model切り替え)
- **entrypoint.sh**: socat bridgeとGatewayの自動起動スクリプト
```mermaid
graph LR
subgraph Host["ホストマシン"]
DC[Docker Compose]
Vol[(clawdbot-data)]
end
subgraph Container["clawdbotコンテナ"]
Gateway[Gateway<br/>127.0.0.1:18789]
Socat[socat bridge<br/>:18790]
Bot[clawdbot]
end
Host -->|51121:51122| Container
Host -->|18789:18790| Container
DC -.->|マウント| Vol
Gateway --> Socat
Socat --> Bot
style Container fill:#e1f5fe
style Gateway fill:#fff3e0
style Bot fill:#f3e5f5
```
## こんな人におすすめ
- Docker ComposeでAIアシスタント環境を構築したい方
- 非rootユーザーでのセキュアなコンテナ実行を検討している方
- 複数のAIモデルを切り替えて使いたい方
- zsh環境でのコンテナ開発を希望する方
## 変更差分
### Dockerfile
```dockerfile
FROM node:22-slim
# Install git, vim, zsh, and other dependencies
RUN apt-get update && apt-get install -y \
git \
vim \
zsh \
curl \
socat \
jq \
&& rm -rf /var/lib/apt/lists/*
# Create a non-root user (using different UID to avoid conflicts)
# Set zsh as default shell
RUN useradd -m -u 1001 -s /bin/zsh clawdbot
# Install clawdbot globally
RUN npm i -g clawdbot@latest
# Wrap clawdbot so that "gateway stop/start/restart" works without systemd.
# The real entry point is preserved as clawdbot-orig.
RUN mv /usr/local/bin/clawdbot /usr/local/bin/clawdbot-orig
COPY clawdbot-wrapper.sh /usr/local/bin/clawdbot
RUN chmod +x /usr/local/bin/clawdbot
# Copy and set up entrypoint script (must be done as root)
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh
# Switch to non-root user
USER clawdbot
# Set working directory
WORKDIR /home/clawdbot
# Create default .zshrc to avoid zsh-newuser-install wizard
RUN touch ~/.zshrc && echo "# Default zsh configuration" >> ~/.zshrc
# Auto-start socat bridges and Gateway on container startup
CMD ["entrypoint.sh"]
```
### docker-compose.yml
```yaml
services:
clawdbot:
build:
context: .
dockerfile: Dockerfile
container_name: clawdbot
env_file:
- .env
environment:
# AI Model Configuration (default, can be overridden by .env)
CLAWDBOT_AI_MODEL: glm-4.7
# Discord Guild Allowlist (comma-separated guild IDs)
# 実際のサーバーIDを設定してください
# DISCORD_GUILD_IDS: "YOUR_DISCORD_GUILD_ID"
ports:
- "127.0.0.1:51121:51122" # OAuth: localhost only
- "127.0.0.1:18789:18790" # Gateway: localhost only
volumes:
- ./clawdbot-data:/home/clawdbot/.clawdbot
restart: unless-stopped
stdin_open: true
tty: true
```
### Makefile
```makefile
.PHONY: help up down logs login shell restart build clean model-glm model-gemini model-status
help:
@echo "clawdbot Docker Commands:"
@echo " make login - Login to clawdbot container (zsh shell)"
@echo " make shell - Same as login"
@echo " make up - Start the container"
@echo " make down - Stop the container"
@echo " make restart - Restart the container"
@echo " make build - Build the Docker image"
@echo " make logs - View container logs"
@echo " make clean - Remove containers and images"
@echo ""
@echo "Model switching (no restart needed):"
@echo " make model-glm - Switch to GLM 4.7"
@echo " make model-gemini - Switch to Gemini 3 Flash"
@echo " make model-status - Show current model"
login:
docker compose exec -it clawdbot zsh
shell: login
up:
docker compose up -d
down:
docker compose down
restart:
docker compose restart clawdbot
build:
docker compose build
logs:
docker compose logs -f clawdbot
clean:
docker compose down
docker rmi your-project-clawdbot:latest
model-glm:
docker compose exec clawdbot clawdbot models set zai/glm-4.7
@echo "Switched to GLM 4.7"
model-gemini:
docker compose exec clawdbot clawdbot models set google-antigravity/gemini-3-flash
@echo "Switched to Gemini 3 Flash"
model-status:
docker compose exec clawdbot clawdbot models status
.DEFAULT_GOAL := help
```
### entrypoint.sh(抜粋)
```bash
#!/bin/bash
# Container entrypoint: auto-start socat bridges and Gateway on container startup
# Fix state directory permissions (security hardening)
chmod 700 /home/clawdbot/.clawdbot 2>/dev/null || true
chmod 700 /home/clawdbot/.clawdbot/credentials 2>/dev/null || true
# Start socat bridge: container:18790 → 127.0.0.1:18789 (Gateway)
echo "Starting socat bridge for Gateway (18790 → 127.0.0.1:18789)..."
socat TCP-LISTEN:18790,fork,reuseaddr TCP:127.0.0.1:18789 &
# ... (OAuth bridge and Gateway auto-start logic continues)
```
### その他の追加ファイル
- **.env.example**: 環境変数テンプレート(API keys, Telegram/Slack設定)
- **.gitignore**: `.env`, `clawdbot-data/`, IDE設定の除外
- **CLAUDE.md**: Claude Codeへのプロジェクトガイド(506行)
- **clawdbot-wrapper.sh**: systemdなし環境でのgateway制御ラッパー
- **dcl**: コンテナログインショートカットスクリプト
## 良かった点
このDocker Compose環境で実際に運用してみて、特に良かった点があります。
### Makefileのショートカットコマンドが便利
コンテナ操作やモデル切り替えが`make xxx`で完結するため、毎回docker composeコマンドを入力する手間が省けます。
特に`make model-glm`と`make model-gemini`でAIモデルを切り替えられるのは、動作確認や性能比較で重宝しました。
再起動なしでモデルを変更できる点も大きいです。コンテナを止めることなく、即座に別のAIモデルを試せます。
### 非rootユーザー実行の安心感
UID 1001の専用ユーザーで実行することで、ホスト側のユーザー権限と衝突せず、セキュリティ的にも安心です。
ボリュームマウント時のファイル権限問題も回避でき、スムーズに開発を進められました。
### zsh環境の快適さ
デフォルトシェルがzshなため、補完機能やエイリアスが使えて操作性が高いです。
vimやgitもプリインストールされているため、コンテナ内で即座に開発作業ができます。
## つまづいた点
セットアップ時にいくつかハマったポイントがあります。
### socat bridgeの必要性
当初、Gatewayのポート設定で躓きました。
コンテナ内部の`127.0.0.1:18789`と、コンテナ外部からアクセスするポート`:18790`を中継するsocat bridgeが必要でした。
この設定がないと、OAuth認証やGateway通信が正しく動作しません。
最初はこの仕組みが理解できず、OAuthコールバックが失敗する原因を特定するのに時間がかかりました。
### zsh-newuser-installの回避
非rootユーザーで初めてzshを起動すると、設定ウィザードが表示されます。
コンテナ起動時にこれが出ると自動化の妨げになるため、`.zshrc`を事前に作成して回避しました。
```bash
# Create default .zshrc to avoid zsh-newuser-install wizard
RUN touch ~/.zshrc && echo "# Default zsh configuration" >> ~/.zshrc
```
この一行がないと、`make login`でzshが起動するたびにウィザードが表示されてしまいます。
### systemdがない環境でのgateway制御
clawdbotの`gateway start/stop/restart`コマンドは、通常systemdに依存しています。
Dockerコンテナ内にはsystemdがないため、このままでは動作しません。
そこで`clawdbot-wrapper.sh`というラッパースクリプトを作成し、systemdなしでgatewayを制御できるようにしました。
## 補足
### 設計のポイント
1. **非rootユーザー実行**: セキュリティのため、UID 1001の`clawdbot`ユーザーでコンテナ実行
2. **zshをデフォルトシェル**: 補完機能とエイリアスサポート
3. **localhostバインディング**: ポートを127.0.0.1に制限して外部露出を防止
4. **socat bridge**: コンテナ内部(127.0.0.1)とコンテナポート(18790)を中継
5. **モデル切り替え機能**: `make model-glm`等でAIモデルを再起動なしで変更可能
### 使い方
```mermaid
flowchart TD
A[開始] --> B[make build<br/>イメージビルド]
B --> C[make up<br/>コンテナ起動]
C --> D[make login<br/>ログイン]
D --> E{操作}
E -->|モデル切り替え| F[make model-glm/gemini]
E -->|ログ確認| G[make logs]
E -->|停止| H[make down]
F --> E
G --> E
H --> I[終了]
style B fill:#e3f2fd
style C fill:#e3f2fd
style F fill:#fff3e0
style H fill:#ffebee
```
```bash
# ビルドして起動
make build
make up
# コンテナにログイン
make login
# AIモデル切り替え
make model-glm
# ログ確認
make logs
```
## チェックリスト
- [x] Dockerfileの作成とビルド確認
- [x] docker-compose.ymlの設定
- [x] Makefileのショートカットコマンド実装
- [x] entrypoint.shの自動起動スクリプト
- [x] 環境変数テンプレート(.env.example)
- [x] ドキュメント(CLAUDE.md)作成
- [ ] 実際のTelegram/Slack連携テスト
- [ ] cronジョブ設定のテスト
- [ ] 音声文字起こし機能のテスト(OpenAI Whisper)
## まとめ
clawdbotのDocker Compose環境を構築しました。
非rootユーザー実行やlocalhostバインディングなど、セキュリティを考慮した設計になっています。
Makefileによるショートカットコマンドで、コンテナ操作やAIモデル切り替えがスムーズに行える点が便利です。
次回は、Telegram/Slack連携とcronジョブ設定のテストを進める予定です。
## よくある質問(FAQ)
### Docker Composeで非rootユーザーを実行するには?
Dockerfileで`USER`指令を使用して、非rootユーザーに切り替えます。
UID 1001などの専用ユーザーを作成し、セキュリティを強化できます。
```dockerfile
# Create a non-root user
RUN useradd -m -u 1001 -s /bin/zsh clawdbot
# Switch to non-root user
USER clawdbot
```
### socat bridgeとは何ですか?
socat bridgeは、コンテナ内部のネットワーク(127.0.0.1)と、コンテナ外部からアクセスするポートを中継する仕組みです。
OAuth認証やGateway通信など、localhostバインディングが必要なサービスで活用します。
```bash
# Start socat bridge: container:18790 → 127.0.0.1:18789 (Gateway)
socat TCP-LISTEN:18790,fork,reuseaddr TCP:127.0.0.1:18789 &
```
### AIモデルを再起動なしで切り替える方法は?
`make model-glm`や`make model-gemini`などのコマンドで、コンテナを再起動せずにAIモデルを切り替えられます。
これはclawdbotの動的モデル切り替え機能を活用しています。
```bash
# GLM 4.7に切り替え
make model-glm
# Gemini 3 Flashに切り替え
make model-gemini
# 現在のモデルを確認
make model-status
```
### zsh-newuser-installウィザードを回避するには?
非rootユーザーで初めてzshを起動すると、設定ウィザードが表示されます。
`.zshrc`を事前に作成することで、このウィザードを回避できます。
```dockerfile
# Create default .zshrc to avoid zsh-newuser-install wizard
RUN touch ~/.zshrc && echo "# Default zsh configuration" >> ~/.zshrc
```
### Dockerコンテナでsystemdなしにプロセスを制御するには?
clawdbotの`gateway start/stop/restart`コマンドは、通常systemdに依存しています。
Dockerコンテナ内にはsystemdがないため、ラッパースクリプトを作成して代替します。
```bash
#!/bin/bash
# clawdbot-wrapper.sh: systemdなし環境でのgateway制御ラッパー
```
## 参考リンク
本記事の執筆にあたり、以下の公式ドキュメントを参考にしました。
- [Docker Compose公式ドキュメント](https://docs.docker.com/compose/)
- [Dockerセキュリティベストプラクティス](https://docs.docker.com/engine/security/)
- [zsh公式ドキュメント](https://zsh.sourceforge.io/)
- [Node.js公式Dockerイメージ](https://hub.docker.com/_/node)
## 関連記事
Docker環境の構築について、以下の記事も参考にしてください。
- [Cloudflare R2のプレビュー機能で遭遇したエラーの解決方法](/infrastructure/cloudflare/20251216-cloudflare-r2-preview-error)
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "Docker ComposeでAIアシスタント環境を構築する方法",
"description": "Docker Composeを使ってclawdbot(AIアシスタント)の環境を構築する完全ガイド。非rootユーザー実行やsocat bridgeの設定方法も解説します。",
"step": [
{
"@type": "HowToStep",
"name": "Dockerfileを作成",
"text": "node:22-slimベースのDockerfileを作成し、git、vim、zsh、curl、socat、jqなどの必要なパッケージをインストールします。UID 1001の非rootユーザーclawdbotを作成し、セキュリティを強化します。"
},
{
"@type": "HowToStep",
"name": "docker-compose.ymlを設定",
"text": "サービス定義とボリューム/ポート設定を行います。環境変数としてCLAWDBOT_AI_MODELとDISCORD_GUILD_IDSを設定し、ポートは127.0.0.1に制限して外部露出を防止します。"
},
{
"@type": "HowToStep",
"name": "Makefileを作成",
"text": "コンテナ操作のショートカットコマンド(login、up、down、restart、build、logs、clean)と、AIモデル切り替えコマンド(model-glm、model-gemini、model-status)を定義します。"
},
{
"@type": "HowToStep",
"name": "entrypoint.shを設定",
"text": "socat bridgeとGatewayを自動起動するスクリプトを作成します。コンテナ内部の127.0.0.1:18789と、コンテナ外部のポート:18790を中継します。"
},
{
"@type": "HowToStep",
"name": "ビルドして起動",
"text": "make build && make up でコンテナをビルドして起動します。make loginでコンテナ内のzshシェルにログインできます。"
}
],
"tool": [
{
"@type": "HowToTool",
"name": "Docker Compose"
},
{
"@type": "HowToTool",
"name": "Make"
},
{
"@type": "HowToTool",
"name": "zsh"
}
]
}
</script>

Docker ComposeでAIアシスタント環境を構築する完全ガイド
Docker Composeを使ってAIアシスタント(clawdbot)の環境を構築する方法を解説します。
このセットアップにより、コンテナ内でclawdbotを実行し、Telegram/Slack等のプラットフォームと連携できるようになります。
実装の主な特徴は以下の通りです。
- Dockerfile: node:22-slimベースのコンテナイメージ(zsh、vim、git、curlを含む)
- docker-compose.yml: サービス定義とボリューム/ポート設定
- Makefile: コンテナ操作のショートカットコマンド(login, up, down, model切り替え)
- entrypoint.sh: socat bridgeとGatewayの自動起動スクリプト
graph LR
subgraph Host["ホストマシン"]
DC[Docker Compose]
Vol[(clawdbot-data)]
end
subgraph Container["clawdbotコンテナ"]
Gateway[Gateway<br/>127.0.0.1:18789]
Socat[socat bridge<br/>:18790]
Bot[clawdbot]
end
Host -->|51121:51122| Container
Host -->|18789:18790| Container
DC -.->|マウント| Vol
Gateway --> Socat
Socat --> Bot
style Container fill:#e1f5fe
style Gateway fill:#fff3e0
style Bot fill:#f3e5f5
こんな人におすすめ
- Docker ComposeでAIアシスタント環境を構築したい方
- 非rootユーザーでのセキュアなコンテナ実行を検討している方
- 複数のAIモデルを切り替えて使いたい方
- zsh環境でのコンテナ開発を希望する方
変更差分
Dockerfile
FROM node:22-slim
# Install git, vim, zsh, and other dependencies
RUN apt-get update && apt-get install -y \
git \
vim \
zsh \
curl \
socat \
jq \
&& rm -rf /var/lib/apt/lists/*
# Create a non-root user (using different UID to avoid conflicts)
# Set zsh as default shell
RUN useradd -m -u 1001 -s /bin/zsh clawdbot
# Install clawdbot globally
RUN npm i -g clawdbot@latest
# Wrap clawdbot so that "gateway stop/start/restart" works without systemd.
# The real entry point is preserved as clawdbot-orig.
RUN mv /usr/local/bin/clawdbot /usr/local/bin/clawdbot-orig
COPY clawdbot-wrapper.sh /usr/local/bin/clawdbot
RUN chmod +x /usr/local/bin/clawdbot
# Copy and set up entrypoint script (must be done as root)
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh
# Switch to non-root user
USER clawdbot
# Set working directory
WORKDIR /home/clawdbot
# Create default .zshrc to avoid zsh-newuser-install wizard
RUN touch ~/.zshrc && echo "# Default zsh configuration" >> ~/.zshrc
# Auto-start socat bridges and Gateway on container startup
CMD ["entrypoint.sh"]
docker-compose.yml
services:
clawdbot:
build:
context: .
dockerfile: Dockerfile
container_name: clawdbot
env_file:
- .env
environment:
# AI Model Configuration (default, can be overridden by .env)
CLAWDBOT_AI_MODEL: glm-4.7
# Discord Guild Allowlist (comma-separated guild IDs)
# 実際のサーバーIDを設定してください
# DISCORD_GUILD_IDS: "YOUR_DISCORD_GUILD_ID"
ports:
- "127.0.0.1:51121:51122" # OAuth: localhost only
- "127.0.0.1:18789:18790" # Gateway: localhost only
volumes:
- ./clawdbot-data:/home/clawdbot/.clawdbot
restart: unless-stopped
stdin_open: true
tty: true
Makefile
.PHONY: help up down logs login shell restart build clean model-glm model-gemini model-status
help:
@echo "clawdbot Docker Commands:"
@echo " make login - Login to clawdbot container (zsh shell)"
@echo " make shell - Same as login"
@echo " make up - Start the container"
@echo " make down - Stop the container"
@echo " make restart - Restart the container"
@echo " make build - Build the Docker image"
@echo " make logs - View container logs"
@echo " make clean - Remove containers and images"
@echo ""
@echo "Model switching (no restart needed):"
@echo " make model-glm - Switch to GLM 4.7"
@echo " make model-gemini - Switch to Gemini 3 Flash"
@echo " make model-status - Show current model"
login:
docker compose exec -it clawdbot zsh
shell: login
up:
docker compose up -d
down:
docker compose down
restart:
docker compose restart clawdbot
build:
docker compose build
logs:
docker compose logs -f clawdbot
clean:
docker compose down
docker rmi your-project-clawdbot:latest
model-glm:
docker compose exec clawdbot clawdbot models set zai/glm-4.7
@echo "Switched to GLM 4.7"
model-gemini:
docker compose exec clawdbot clawdbot models set google-antigravity/gemini-3-flash
@echo "Switched to Gemini 3 Flash"
model-status:
docker compose exec clawdbot clawdbot models status
.DEFAULT_GOAL := help
#!/bin/bash
# Container entrypoint: auto-start socat bridges and Gateway on container startup
# Fix state directory permissions (security hardening)
chmod 700 /home/clawdbot/.clawdbot 2>/dev/null || true
chmod 700 /home/clawdbot/.clawdbot/credentials 2>/dev/null || true
# Start socat bridge: container:18790 → 127.0.0.1:18789 (Gateway)
echo "Starting socat bridge for Gateway (18790 → 127.0.0.1:18789)..."
socat TCP-LISTEN:18790,fork,reuseaddr TCP:127.0.0.1:18789 &
# ... (OAuth bridge and Gateway auto-start logic continues)
その他の追加ファイル
- .env.example: 環境変数テンプレート(API keys, Telegram/Slack設定)
- .gitignore:
.env, clawdbot-data/, IDE設定の除外
- CLAUDE.md: Claude Codeへのプロジェクトガイド(506行)
- clawdbot-wrapper.sh: systemdなし環境でのgateway制御ラッパー
- dcl: コンテナログインショートカットスクリプト
良かった点
このDocker Compose環境で実際に運用してみて、特に良かった点があります。
Makefileのショートカットコマンドが便利
コンテナ操作やモデル切り替えがmake xxxで完結するため、毎回docker composeコマンドを入力する手間が省けます。
特にmake model-glmとmake model-geminiでAIモデルを切り替えられるのは、動作確認や性能比較で重宝しました。
再起動なしでモデルを変更できる点も大きいです。コンテナを止めることなく、即座に別のAIモデルを試せます。
非rootユーザー実行の安心感
UID 1001の専用ユーザーで実行することで、ホスト側のユーザー権限と衝突せず、セキュリティ的にも安心です。
ボリュームマウント時のファイル権限問題も回避でき、スムーズに開発を進められました。
zsh環境の快適さ
デフォルトシェルがzshなため、補完機能やエイリアスが使えて操作性が高いです。
vimやgitもプリインストールされているため、コンテナ内で即座に開発作業ができます。
つまづいた点
セットアップ時にいくつかハマったポイントがあります。
socat bridgeの必要性
当初、Gatewayのポート設定で躓きました。
コンテナ内部の127.0.0.1:18789と、コンテナ外部からアクセスするポート:18790を中継するsocat bridgeが必要でした。
この設定がないと、OAuth認証やGateway通信が正しく動作しません。
最初はこの仕組みが理解できず、OAuthコールバックが失敗する原因を特定するのに時間がかかりました。
zsh-newuser-installの回避
非rootユーザーで初めてzshを起動すると、設定ウィザードが表示されます。
コンテナ起動時にこれが出ると自動化の妨げになるため、.zshrcを事前に作成して回避しました。
# Create default .zshrc to avoid zsh-newuser-install wizard
RUN touch ~/.zshrc && echo "# Default zsh configuration" >> ~/.zshrc
この一行がないと、make loginでzshが起動するたびにウィザードが表示されてしまいます。
systemdがない環境でのgateway制御
clawdbotのgateway start/stop/restartコマンドは、通常systemdに依存しています。
Dockerコンテナ内にはsystemdがないため、このままでは動作しません。
そこでclawdbot-wrapper.shというラッパースクリプトを作成し、systemdなしでgatewayを制御できるようにしました。
補足
設計のポイント
- 非rootユーザー実行: セキュリティのため、UID 1001の
clawdbotユーザーでコンテナ実行
- zshをデフォルトシェル: 補完機能とエイリアスサポート
- localhostバインディング: ポートを127.0.0.1に制限して外部露出を防止
- socat bridge: コンテナ内部(127.0.0.1)とコンテナポート(18790)を中継
- モデル切り替え機能:
make model-glm等でAIモデルを再起動なしで変更可能
使い方
flowchart TD
A[開始] --> B[make build<br/>イメージビルド]
B --> C[make up<br/>コンテナ起動]
C --> D[make login<br/>ログイン]
D --> E{操作}
E -->|モデル切り替え| F[make model-glm/gemini]
E -->|ログ確認| G[make logs]
E -->|停止| H[make down]
F --> E
G --> E
H --> I[終了]
style B fill:#e3f2fd
style C fill:#e3f2fd
style F fill:#fff3e0
style H fill:#ffebee
# ビルドして起動
make build
make up
# コンテナにログイン
make login
# AIモデル切り替え
make model-glm
# ログ確認
make logs
チェックリスト
まとめ
clawdbotのDocker Compose環境を構築しました。
非rootユーザー実行やlocalhostバインディングなど、セキュリティを考慮した設計になっています。
Makefileによるショートカットコマンドで、コンテナ操作やAIモデル切り替えがスムーズに行える点が便利です。
次回は、Telegram/Slack連携とcronジョブ設定のテストを進める予定です。
よくある質問(FAQ)
Docker Composeで非rootユーザーを実行するには?
DockerfileでUSER指令を使用して、非rootユーザーに切り替えます。
UID 1001などの専用ユーザーを作成し、セキュリティを強化できます。
# Create a non-root user
RUN useradd -m -u 1001 -s /bin/zsh clawdbot
# Switch to non-root user
USER clawdbot
socat bridgeとは何ですか?
socat bridgeは、コンテナ内部のネットワーク(127.0.0.1)と、コンテナ外部からアクセスするポートを中継する仕組みです。
OAuth認証やGateway通信など、localhostバインディングが必要なサービスで活用します。
# Start socat bridge: container:18790 → 127.0.0.1:18789 (Gateway)
socat TCP-LISTEN:18790,fork,reuseaddr TCP:127.0.0.1:18789 &
AIモデルを再起動なしで切り替える方法は?
make model-glmやmake model-geminiなどのコマンドで、コンテナを再起動せずにAIモデルを切り替えられます。
これはclawdbotの動的モデル切り替え機能を活用しています。
# GLM 4.7に切り替え
make model-glm
# Gemini 3 Flashに切り替え
make model-gemini
# 現在のモデルを確認
make model-status
zsh-newuser-installウィザードを回避するには?
非rootユーザーで初めてzshを起動すると、設定ウィザードが表示されます。
.zshrcを事前に作成することで、このウィザードを回避できます。
# Create default .zshrc to avoid zsh-newuser-install wizard
RUN touch ~/.zshrc && echo "# Default zsh configuration" >> ~/.zshrc
Dockerコンテナでsystemdなしにプロセスを制御するには?
clawdbotのgateway start/stop/restartコマンドは、通常systemdに依存しています。
Dockerコンテナ内にはsystemdがないため、ラッパースクリプトを作成して代替します。
#!/bin/bash
# clawdbot-wrapper.sh: systemdなし環境でのgateway制御ラッパー
参考リンク
本記事の執筆にあたり、以下の公式ドキュメントを参考にしました。
関連記事
Docker環境の構築について、以下の記事も参考にしてください。