Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ services:
depends_on:
- ito-server
volumes:
- ./client:/usr/share/nginx/html:ro
- ./client:/usr/share/nginx/html:ro,Z
ports:
- "8080:80"

Expand All @@ -31,14 +31,14 @@ services:
depends_on:
- ito-server
environment:
ITO_SERVER_URL: ws://ito-server:8765
ITO_SERVER_URL: ws://host.containers.internal:8765

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep the Docker mock robot hostname reachable

When the mock profile is run with Docker, the mock driver now connects to Podman's host.containers.internal name instead of the Compose service DNS name that Docker provides for ito-server. Docker's host-service documentation lists host.docker.internal for host access (https://docs.docker.com/desktop/features/networking/networking-how-tos/), and this compose file has no extra_hosts or Docker override for host.containers.internal, so after the network issue is addressed the documented Docker mock command will still leave the robot unable to register and reconnecting forever. Keep ws://ito-server:8765 for Docker or make the Podman hostname an override/env default.

Useful? React with 👍 / 👎.

ITO_MOCK_ROBOT_ID: mock-robot-1
ITO_MOCK_ROBOT_NAME: Mock Robot
ITO_MOCK_ROBOT_STATUS_INTERVAL_MS: "1000"
ITO_MOCK_ROBOT_CAMERA_VIDEO: /data/mock-camera.mp4
ITO_MOCK_ROBOT_CAMERA_LOOP: "true"
volumes:
- ${ITO_MOCK_ROBOT_CAMERA_VIDEO_HOST:-./fixtures/mock-camera.mp4}:/data/mock-camera.mp4:ro
- ${ITO_MOCK_ROBOT_CAMERA_VIDEO_HOST:-./fixtures/mock-camera.mp4}:/data/mock-camera.mp4:ro,Z

ito-droid:
profiles:
Expand All @@ -53,3 +53,8 @@ services:
ITO_DROID_NAME: ${ITO_DROID_NAME:-Ito Droid}
ITO_DROID_ROS_CAMERA_TOPIC: ${ITO_DROID_ROS_CAMERA_TOPIC:-/image_raw}
ITO_DROID_ROS_SERVO_COMMAND_TOPIC: ${ITO_DROID_ROS_SERVO_COMMAND_TOPIC:-/ito_droid/camera_pan/command}

networks:
default:
name: podman
external: true

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Restore Docker-compatible default networking

When a user follows the documented Docker path (docs/local-v1.md still starts with docker compose up --build ito-server pilot-client) on a clean Docker install, this makes the default network depend on a pre-existing network literally named podman. Docker's Compose docs say external networks are not created by Compose and up fails if they are missing (https://docs.docker.com/compose/how-tos/networking/), so the Docker flow now stops before the server/client can start unless the user manually creates a Podman-named Docker network. Keep the normal Compose-created default network, or move this Podman-specific network into an override file.

Useful? React with 👍 / 👎.

21 changes: 20 additions & 1 deletion docs/local-v1.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Local v1 Operation

This guide covers local Ito v1 operation with Docker Compose. It keeps the
This guide covers local Ito v1 operation with Docker Compose or Podman Compose. It keeps the
same boundaries as `docs/v1.md`: the Pilot Client is static web content, the Ito
Server owns catalog/session/reconstruction authority, and robot drivers connect
outward over the Ito Protocol WebSocket control plane.
Expand All @@ -22,8 +22,20 @@ Build and run the local server, Pilot Client, and Mock Robot:

```sh
docker compose up --build
# or, with Podman Compose:
podman compose up --build
```

The Compose file uses Podman's pre-existing external `podman` network instead of
a project-created bridge network. This keeps local Podman operation independent
of `aardvark-dns`/user-bus startup. The Mock Robot reaches the Ito Server through
`host.containers.internal:8765`; Docker users can still use the same Compose file
because the server port is published to the host.

Bind mounts use the `Z` SELinux relabel option so rootless Podman containers can
read files from the user's home directory. Without this, nginx may return
`403 Forbidden` even though Unix file permissions look readable.

Open `http://localhost:8080/`. The client defaults to the Ito Server control
WebSocket at `ws://<page-host>:8765`, which is `ws://localhost:8765` for this
Compose setup.
Expand All @@ -32,6 +44,8 @@ Stop and remove local containers:

```sh
docker compose down
# or:
podman compose down
```

## Mock Robot Video
Expand All @@ -42,12 +56,17 @@ different local video file, override `ITO_MOCK_ROBOT_CAMERA_VIDEO_HOST`:
```sh
ITO_MOCK_ROBOT_CAMERA_VIDEO_HOST=/absolute/path/to/mock-camera.mp4 \
docker compose up --build
# or:
ITO_MOCK_ROBOT_CAMERA_VIDEO_HOST=/absolute/path/to/mock-camera.mp4 \
podman compose up --build
```

Useful log streams while testing acquisition and pilot input:

```sh
docker compose logs -f ito-server mock-robot
# or:
podman compose logs -f ito-server mock-robot
```

The Mock Robot exercises the v1 WebSocket control plane, acquisition/session
Expand Down
Loading