feat: Build Goose in a Docker Container (#1551)

This commit is contained in:
ZhenLian
2025-03-10 09:20:47 -07:00
committed by GitHub
parent fa9bb9ebb3
commit 9004c195e5
3 changed files with 196 additions and 0 deletions

View File

@@ -0,0 +1,111 @@
# Build stage
FROM rust:bullseye AS builder
SHELL ["/bin/bash", "-c"]
# Install Node.js and any missing dependencies
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \
apt-get update && apt-get install -y \
nodejs \
libdbus-1-dev \
&& rm -rf /var/lib/apt/lists/*
# Create a new directory for the app
WORKDIR /usr/src/goose
# Copy the entire project
COPY . .
# Build the project
RUN cargo build --release
# Runtime stage
FROM ubuntu:22.04
# Configure non-interactive installation
ENV DEBIAN_FRONTEND=noninteractive
# Install runtime libraries with DBus and keyring support
RUN apt-get update && apt-get install -y \
# Runtime dependencies
ca-certificates \
curl \
gnupg \
# DBus and keyring
dbus \
dbus-x11 \
gnome-keyring \
libsecret-1-0 \
libsecret-tools \
# Other dependencies
libssl3 \
libxcb1 \
&& rm -rf /var/lib/apt/lists/*
# Install Node.js
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \
apt-get update && apt-get install -y nodejs && \
rm -rf /var/lib/apt/lists/*
# Install common development tools
RUN apt-get update && apt-get install -y \
# Version control
git \
# Text processing and search
ripgrep \
fd-find \
fzf \
# File manipulation
jq \
# Network tools
wget \
# Process management
htop \
# System utilities
sudo \
# Text editors
nano \
vim \
# Archive tools
zip \
unzip \
# Build essentials
build-essential \
# Python
python3 \
python3-pip \
# Additional tools
tree \
tmux \
&& rm -rf /var/lib/apt/lists/*
# Install uv using curl
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
# Copy the built binaries
COPY --from=builder /usr/src/goose/target/release/goose /usr/local/bin/
# Create a wrapper script to initialize DBus and keyring
RUN echo '#!/bin/bash\n\
# Start DBus session daemon if not running\n\
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then\n\
eval $(dbus-launch --sh-syntax)\n\
export DBUS_SESSION_BUS_ADDRESS\n\
fi\n\
\n\
# Initialize keyring if needed\n\
if [ -z "$GNOME_KEYRING_CONTROL" ]; then\n\
eval $(gnome-keyring-daemon --start)\n\
export GNOME_KEYRING_CONTROL SSH_AUTH_SOCK\n\
fi\n\
\n\
' > /usr/local/bin/entrypoint.sh && \
chmod +x /usr/local/bin/entrypoint.sh
# Set up some basic git config
RUN git config --global init.defaultBranch main && \
git config --global core.editor "vim"
# Add some helpful aliases
RUN echo 'alias ll="ls -la"' >> ~/.bashrc && \
echo 'alias fd=fdfind' >> ~/.bashrc

View File

@@ -0,0 +1,36 @@
services:
goose-cli:
build:
context: ../../..
dockerfile: documentation/docs/docker/Dockerfile
args:
USER_ID: ${UID:-1000}
volumes:
# Mount user's directory with read-write access
- ../../..:/root/workspace
- goose-config:/root/.goose
# Mount git config
- ~/.gitconfig:/root/.gitconfig:ro
# Mount SSH keys
- ~/.ssh:/root/.ssh:ro
working_dir: /root/workspace
environment:
- OOSE_HOME=/root/.goose
# Set default editor
- EDITOR=vim
# Preserve git author info
- GIT_AUTHOR_NAME=${GIT_AUTHOR_NAME:-Goose User}
- GIT_AUTHOR_EMAIL=${GIT_AUTHOR_EMAIL:-goose@example.com}
# Set GOOGLE_API_KEY to your own API key
- GOOGLE_API_KEY="XXX"
- GOOSE_PROVIDER=google
- GOOSE_MODEL=gemini-2.0-flash-exp
- DBUS_SESSION_BUS_ADDRESS
- GNOME_KEYRING_CONTROL
- SSH_AUTH_SOCK
stdin_open: true
tty: true
entrypoint: ["/bin/bash"]
volumes:
goose-config: