Fix Docker first-run bootstrap and local compose image
This commit is contained in:
parent
2f4f45080b
commit
37a1aead62
10 changed files with 80 additions and 47 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -18,6 +18,7 @@ cmd/**/workspace
|
||||||
.picoclaw/
|
.picoclaw/
|
||||||
config.json
|
config.json
|
||||||
sessions/
|
sessions/
|
||||||
|
docker/data/
|
||||||
build/
|
build/
|
||||||
|
|
||||||
# Coverage
|
# Coverage
|
||||||
|
|
|
||||||
|
|
@ -190,17 +190,17 @@ docker compose -f docker/docker-compose.yml --profile gateway down
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Poser une question
|
# Poser une question
|
||||||
docker compose -f docker/docker-compose.yml run --rm picoclaw-agent -m "Combien font 2+2 ?"
|
docker compose -f docker/docker-compose.yml --profile agent run --rm picoclaw-agent -m "Combien font 2+2 ?"
|
||||||
|
|
||||||
# Mode interactif
|
# Mode interactif
|
||||||
docker compose -f docker/docker-compose.yml run --rm picoclaw-agent
|
docker compose -f docker/docker-compose.yml --profile agent run --rm picoclaw-agent
|
||||||
```
|
```
|
||||||
|
|
||||||
### Mettre à jour
|
### Mettre à jour
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose -f docker/docker-compose.yml pull
|
git pull
|
||||||
docker compose -f docker/docker-compose.yml --profile gateway up -d
|
docker compose -f docker/docker-compose.yml --profile gateway up --build -d
|
||||||
```
|
```
|
||||||
|
|
||||||
### 🚀 Démarrage Rapide
|
### 🚀 Démarrage Rapide
|
||||||
|
|
|
||||||
|
|
@ -152,17 +152,17 @@ docker compose -f docker/docker-compose.yml --profile gateway down
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 質問を投げる
|
# 質問を投げる
|
||||||
docker compose -f docker/docker-compose.yml run --rm picoclaw-agent -m "What is 2+2?"
|
docker compose -f docker/docker-compose.yml --profile agent run --rm picoclaw-agent -m "What is 2+2?"
|
||||||
|
|
||||||
# インタラクティブモード
|
# インタラクティブモード
|
||||||
docker compose -f docker/docker-compose.yml run --rm picoclaw-agent
|
docker compose -f docker/docker-compose.yml --profile agent run --rm picoclaw-agent
|
||||||
```
|
```
|
||||||
|
|
||||||
### アップデート
|
### アップデート
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose -f docker/docker-compose.yml pull
|
git pull
|
||||||
docker compose -f docker/docker-compose.yml --profile gateway up -d
|
docker compose -f docker/docker-compose.yml --profile gateway up --build -d
|
||||||
```
|
```
|
||||||
|
|
||||||
### 🚀 クイックスタート(ネイティブ)
|
### 🚀 クイックスタート(ネイティブ)
|
||||||
|
|
|
||||||
|
|
@ -198,17 +198,17 @@ docker compose -f docker/docker-compose.yml --profile gateway down
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Ask a question
|
# Ask a question
|
||||||
docker compose -f docker/docker-compose.yml run --rm picoclaw-agent -m "What is 2+2?"
|
docker compose -f docker/docker-compose.yml --profile agent run --rm picoclaw-agent -m "What is 2+2?"
|
||||||
|
|
||||||
# Interactive mode
|
# Interactive mode
|
||||||
docker compose -f docker/docker-compose.yml run --rm picoclaw-agent
|
docker compose -f docker/docker-compose.yml --profile agent run --rm picoclaw-agent
|
||||||
```
|
```
|
||||||
|
|
||||||
### Update
|
### Update
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose -f docker/docker-compose.yml pull
|
git pull
|
||||||
docker compose -f docker/docker-compose.yml --profile gateway up -d
|
docker compose -f docker/docker-compose.yml --profile gateway up --build -d
|
||||||
```
|
```
|
||||||
|
|
||||||
### 🚀 Quick Start
|
### 🚀 Quick Start
|
||||||
|
|
|
||||||
|
|
@ -191,17 +191,17 @@ docker compose -f docker/docker-compose.yml --profile gateway down
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Fazer uma pergunta
|
# Fazer uma pergunta
|
||||||
docker compose -f docker/docker-compose.yml run --rm picoclaw-agent -m "Quanto e 2+2?"
|
docker compose -f docker/docker-compose.yml --profile agent run --rm picoclaw-agent -m "Quanto e 2+2?"
|
||||||
|
|
||||||
# Modo interativo
|
# Modo interativo
|
||||||
docker compose -f docker/docker-compose.yml run --rm picoclaw-agent
|
docker compose -f docker/docker-compose.yml --profile agent run --rm picoclaw-agent
|
||||||
```
|
```
|
||||||
|
|
||||||
### Atualizar
|
### Atualizar
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose -f docker/docker-compose.yml pull
|
git pull
|
||||||
docker compose -f docker/docker-compose.yml --profile gateway up -d
|
docker compose -f docker/docker-compose.yml --profile gateway up --build -d
|
||||||
```
|
```
|
||||||
|
|
||||||
### 🚀 Início Rápido
|
### 🚀 Início Rápido
|
||||||
|
|
|
||||||
|
|
@ -171,17 +171,17 @@ docker compose -f docker/docker-compose.yml --profile gateway down
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Đặt câu hỏi
|
# Đặt câu hỏi
|
||||||
docker compose -f docker/docker-compose.yml run --rm picoclaw-agent -m "2+2 bằng mấy?"
|
docker compose -f docker/docker-compose.yml --profile agent run --rm picoclaw-agent -m "2+2 bằng mấy?"
|
||||||
|
|
||||||
# Chế độ tương tác
|
# Chế độ tương tác
|
||||||
docker compose -f docker/docker-compose.yml run --rm picoclaw-agent
|
docker compose -f docker/docker-compose.yml --profile agent run --rm picoclaw-agent
|
||||||
```
|
```
|
||||||
|
|
||||||
### Cập nhật
|
### Cập nhật
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose -f docker/docker-compose.yml pull
|
git pull
|
||||||
docker compose -f docker/docker-compose.yml --profile gateway up -d
|
docker compose -f docker/docker-compose.yml --profile gateway up --build -d
|
||||||
```
|
```
|
||||||
|
|
||||||
### 🚀 Bắt đầu nhanh
|
### 🚀 Bắt đầu nhanh
|
||||||
|
|
|
||||||
|
|
@ -192,17 +192,17 @@ docker compose -f docker/docker-compose.yml --profile gateway down
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 提问
|
# 提问
|
||||||
docker compose -f docker/docker-compose.yml run --rm picoclaw-agent -m "2+2 等于几?"
|
docker compose -f docker/docker-compose.yml --profile agent run --rm picoclaw-agent -m "2+2 等于几?"
|
||||||
|
|
||||||
# 交互模式
|
# 交互模式
|
||||||
docker compose -f docker/docker-compose.yml run --rm picoclaw-agent
|
docker compose -f docker/docker-compose.yml --profile agent run --rm picoclaw-agent
|
||||||
```
|
```
|
||||||
|
|
||||||
### 更新镜像
|
### 更新镜像
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose -f docker/docker-compose.yml pull
|
git pull
|
||||||
docker compose -f docker/docker-compose.yml --profile gateway up -d
|
docker compose -f docker/docker-compose.yml --profile gateway up --build -d
|
||||||
```
|
```
|
||||||
|
|
||||||
### 🚀 快速开始
|
### 🚀 快速开始
|
||||||
|
|
|
||||||
|
|
@ -24,20 +24,23 @@ RUN apk add --no-cache ca-certificates tzdata curl
|
||||||
|
|
||||||
# Health check
|
# Health check
|
||||||
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
||||||
CMD wget -q --spider http://localhost:18790/health || exit 1
|
CMD curl -fsS http://localhost:18790/health >/dev/null || exit 1
|
||||||
|
|
||||||
# Copy binary
|
# Copy binary
|
||||||
COPY --from=builder /src/build/picoclaw /usr/local/bin/picoclaw
|
COPY --from=builder /src/build/picoclaw /usr/local/bin/picoclaw
|
||||||
|
COPY docker/entrypoint.sh /entrypoint.sh
|
||||||
|
|
||||||
# Create non-root user and group
|
# Create non-root user and group
|
||||||
RUN addgroup -g 1000 picoclaw && \
|
RUN addgroup -g 1000 picoclaw && \
|
||||||
adduser -D -u 1000 -G picoclaw picoclaw
|
adduser -D -u 1000 -h /home/picoclaw -G picoclaw picoclaw && \
|
||||||
|
mkdir -p /home/picoclaw/.picoclaw && \
|
||||||
|
chown -R picoclaw:picoclaw /home/picoclaw && \
|
||||||
|
chmod +x /entrypoint.sh
|
||||||
|
|
||||||
|
ENV HOME=/home/picoclaw
|
||||||
|
|
||||||
# Switch to non-root user
|
# Switch to non-root user
|
||||||
USER picoclaw
|
USER picoclaw
|
||||||
|
|
||||||
# Run onboard to create initial directories and config
|
ENTRYPOINT ["/entrypoint.sh"]
|
||||||
RUN /usr/local/bin/picoclaw onboard
|
|
||||||
|
|
||||||
ENTRYPOINT ["picoclaw"]
|
|
||||||
CMD ["gateway"]
|
CMD ["gateway"]
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,29 @@
|
||||||
services:
|
services:
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# PicoClaw Init (one-shot bootstrap)
|
||||||
|
# docker compose -f docker/docker-compose.yml --profile init run --rm picoclaw-init
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
picoclaw-init:
|
||||||
|
image: picoclaw-local:dev
|
||||||
|
build:
|
||||||
|
context: ..
|
||||||
|
dockerfile: docker/Dockerfile
|
||||||
|
container_name: picoclaw-init
|
||||||
|
profiles:
|
||||||
|
- init
|
||||||
|
volumes:
|
||||||
|
- ./data:/home/picoclaw/.picoclaw
|
||||||
|
command: ["onboard"]
|
||||||
|
|
||||||
# ─────────────────────────────────────────────
|
# ─────────────────────────────────────────────
|
||||||
# PicoClaw Agent (one-shot query)
|
# PicoClaw Agent (one-shot query)
|
||||||
# docker compose -f docker/docker-compose.yml run --rm picoclaw-agent -m "Hello"
|
# docker compose -f docker/docker-compose.yml --profile agent run --rm picoclaw-agent -m "Hello"
|
||||||
# ─────────────────────────────────────────────
|
# ─────────────────────────────────────────────
|
||||||
picoclaw-agent:
|
picoclaw-agent:
|
||||||
image: docker.io/sipeed/picoclaw:latest
|
image: picoclaw-local:dev
|
||||||
|
build:
|
||||||
|
context: ..
|
||||||
|
dockerfile: docker/Dockerfile
|
||||||
container_name: picoclaw-agent
|
container_name: picoclaw-agent
|
||||||
profiles:
|
profiles:
|
||||||
- agent
|
- agent
|
||||||
|
|
@ -12,17 +31,20 @@ services:
|
||||||
#extra_hosts:
|
#extra_hosts:
|
||||||
# - "host.docker.internal:host-gateway"
|
# - "host.docker.internal:host-gateway"
|
||||||
volumes:
|
volumes:
|
||||||
- ./data:/root/.picoclaw
|
- ./data:/home/picoclaw/.picoclaw
|
||||||
entrypoint: ["picoclaw", "agent"]
|
entrypoint: ["/entrypoint.sh", "agent"]
|
||||||
stdin_open: true
|
stdin_open: true
|
||||||
tty: true
|
tty: true
|
||||||
|
|
||||||
# ─────────────────────────────────────────────
|
# ─────────────────────────────────────────────
|
||||||
# PicoClaw Gateway (Long-running Bot)
|
# PicoClaw Gateway (Long-running Bot)
|
||||||
# docker compose -f docker/docker-compose.yml up picoclaw-gateway
|
# docker compose -f docker/docker-compose.yml --profile gateway up picoclaw-gateway
|
||||||
# ─────────────────────────────────────────────
|
# ─────────────────────────────────────────────
|
||||||
picoclaw-gateway:
|
picoclaw-gateway:
|
||||||
image: docker.io/sipeed/picoclaw:latest
|
image: picoclaw-local:dev
|
||||||
|
build:
|
||||||
|
context: ..
|
||||||
|
dockerfile: docker/Dockerfile
|
||||||
container_name: picoclaw-gateway
|
container_name: picoclaw-gateway
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
profiles:
|
profiles:
|
||||||
|
|
@ -31,4 +53,4 @@ services:
|
||||||
#extra_hosts:
|
#extra_hosts:
|
||||||
# - "host.docker.internal:host-gateway"
|
# - "host.docker.internal:host-gateway"
|
||||||
volumes:
|
volumes:
|
||||||
- ./data:/root/.picoclaw
|
- ./data:/home/picoclaw/.picoclaw
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,22 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# First-run: neither config nor workspace exists.
|
if [ "$#" -eq 0 ]; then
|
||||||
# If config.json is already mounted but workspace is missing we skip onboard to
|
set -- gateway
|
||||||
# avoid the interactive "Overwrite? (y/n)" prompt hanging in a non-TTY container.
|
|
||||||
if [ ! -d "${HOME}/.picoclaw/workspace" ] && [ ! -f "${HOME}/.picoclaw/config.json" ]; then
|
|
||||||
picoclaw onboard
|
|
||||||
echo ""
|
|
||||||
echo "First-run setup complete."
|
|
||||||
echo "Edit ${HOME}/.picoclaw/config.json (add your API key, etc.) then restart the container."
|
|
||||||
exit 0
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
exec picoclaw gateway "$@"
|
# First-run bootstrap for non-interactive Docker execution.
|
||||||
|
# We key off config.json because `picoclaw onboard` only prompts when the config
|
||||||
|
# already exists. This also repairs partial states where the workspace exists
|
||||||
|
# but config.json was never created.
|
||||||
|
if [ "$1" = "gateway" ] || [ "$1" = "agent" ]; then
|
||||||
|
if [ ! -f "${HOME}/.picoclaw/config.json" ]; then
|
||||||
|
picoclaw onboard
|
||||||
|
echo ""
|
||||||
|
echo "First-run setup complete."
|
||||||
|
echo "Edit ${HOME}/.picoclaw/config.json (add your API key, etc.) then restart the container."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec picoclaw "$@"
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue