Skip to content

code-server

Description / nameInput element
Container Registry
Container Configuration Root Path
Timezone
User ID
Group ID
code-server Host Port
code-server /config Path

Build Status Last Commit

VS Code in the browser — run a full development environment on your FreeBSD server and access it from anywhere.

Port 8080
Registry ghcr.io/daemonless/code-server
Daemonless daemonless/code-server
Source coder/code-server
Website coder.com/docs/code-server

Version Tags

Tag Description Best For
latest Upstream Binary. Built from official release. Most users. Matches Linux Docker behavior.
Podman on FreeBSD currently requires root. All commands must be run as root (or via doas/sudo).

Before deploying, ensure your host environment is ready. See the Quick Start Guide for host setup instructions.

Deployment

services:
  code-server:
    image: ghcr.io/daemonless/code-server:latest
    container_name: code-server
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=UTC
    volumes:
      - "/path/to/containers/code-server:/config"
    ports:
      - 8080:8080
    restart: unless-stopped
DIRECTOR_PROJECT=code-server
PUID=1000
PGID=1000
TZ=UTC
options:
  - virtualnet: ':<random> default'
  - nat:
services:
  code-server:
    name: code_server
    options:
      - container: 'boot args:--pull'
    oci:
      user: root
      environment:
        - PUID: !ENV '${PUID}'
        - PGID: !ENV '${PGID}'
        - TZ: !ENV '${TZ}'
    volumes:
      - CODE_SERVER_CONFIG_PATH: /config
volumes:
  CODE_SERVER_CONFIG_PATH:
    device: '/path/to/containers/code-server'
ARG tag=latest

OPTION overwrite=force
OPTION from=ghcr.io/daemonless/code-server:${tag}
podman run -d --name code-server \
  -p 8080:8080 \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=UTC \
  -v /path/to/containers/code-server:/config \
  ghcr.io/daemonless/code-server:latest
- name: Deploy code-server
  containers.podman.podman_container:
    name: code-server
    image: ghcr.io/daemonless/code-server:latest
    state: started
    restart_policy: always
    env:
      PUID: "1000"
      PGID: "1000"
      TZ: "UTC"
    ports:
      - "8080:8080"
    volumes:
      - "/path/to/containers/code-server:/config"

Interactive Configuration

Parameters

Environment Variables

Variable Default Description
PUID 1000 User ID for the application process
PGID 1000 Group ID for the application process
TZ UTC Timezone for the container

Volumes

Path Description
/config Configuration directory

Ports

Port Protocol Description
8080 TCP Web UI

Work in Progress

This image is functional but may change significantly in a future release.

Common dev tools (gcc, clang, llvm, python, gmake) are baked into the image for now.

No sudo / su / doas in Terminal

Podman strips the setuid bit from binaries at runtime, so sudo, su, and doas will not work inside the code-server terminal. To run commands as root, use podman exec from the host.

Installing Packages

This is a known limitation of this WIP image and will likely improve in a future release.

Due to FreeBSD jail restrictions, pkg install cannot be run from the code-server terminal directly. Install additional packages from the host using podman exec:

# Podman
doas podman exec -it -u root code-server pkg install rust cargo

# AppJail
doas appjail cmd jexec code_server pkg install rust cargo

Packages are not persistent

If you recreate the container, you will need to reinstall any packages you have added.

Implementation Details

  • Architectures: amd64
  • User: bsd (UID/GID set via PUID/PGID). Defaults to 1000:1000.
  • Base: Built on ghcr.io/daemonless/base (FreeBSD 15.0).

Need help? Join our Discord community.