-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
108 lines (99 loc) · 3.48 KB
/
Copy pathdocker-compose.yml
File metadata and controls
108 lines (99 loc) · 3.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# The cage.
#
# `caged` is an internal network: Docker gives it no NAT to the outside world.
# The agent, broker, and mcp sit on it. Only bollard-proxy also joins `uplink`
# (a normal bridge with internet), so the proxy is the agent's sole path out.
#
# Decision flow: bollard-mcp tags tool outputs and reports provenance to
# bollard-broker; bollard-proxy asks bollard-broker on every egress; the broker
# applies the taint-keyed policy. The agent reaches broker/mcp directly (NO_PROXY)
# and the wider internet only through the proxy.
x-image: &bollard-image
build:
context: ..
dockerfile: deploy/bollard.Dockerfile
services:
bollard-broker:
<<: *bollard-image
command: ["bollard-broker"]
networks: [caged]
volumes:
- ../policy/default.yaml:/etc/bollard/policy.yaml:ro
environment:
BOLLARD_POLICY: /etc/bollard/policy.yaml
BOLLARD_LISTEN: 0.0.0.0:8090
bollard-mcp:
<<: *bollard-image
command: ["bollard-mcp"]
depends_on: [bollard-broker]
networks: [caged]
volumes:
- ../config/tools.yaml:/etc/bollard/tools.yaml:ro
environment:
BOLLARD_TOOLS: /etc/bollard/tools.yaml
BOLLARD_BROKER: http://bollard-broker:8090
BOLLARD_SESSION: default
BOLLARD_LISTEN: 0.0.0.0:8070
bollard-proxy:
<<: *bollard-image
command: ["bollard-proxy"]
depends_on: [bollard-broker]
networks: [caged, uplink]
environment:
BOLLARD_BROKER: http://bollard-broker:8090
BOLLARD_SESSION: default
BOLLARD_LISTEN: 0.0.0.0:8080
# Local inference backend: on the no-internet `caged` network, so a prompt
# routed here physically cannot leave. Stands in for on-prem Nemotron/RTX.
bollard-infer-local:
<<: *bollard-image
command: ["bollard-infer"]
networks: [caged]
environment:
BOLLARD_INFER_ROLE: backend
BOLLARD_BACKEND_NAME: local-nemotron
BOLLARD_LISTEN: 0.0.0.0:8060
# Point at a real OpenAI-compatible server to make local inference real,
# e.g. an Ollama on a host-local network: http://<ollama-host>:11434
# BOLLARD_BACKEND_UPSTREAM: http://ollama:11434
# Cloud inference backend: reachable only via `uplink`. Stands in for a
# third-party model API.
bollard-infer-cloud:
<<: *bollard-image
command: ["bollard-infer"]
networks: [uplink]
environment:
BOLLARD_INFER_ROLE: backend
BOLLARD_BACKEND_NAME: cloud-gpt
BOLLARD_LISTEN: 0.0.0.0:8060
# Inference gateway: the agent's model endpoint. Routes each call local-vs-cloud
# by the broker's sensitivity decision.
bollard-infer:
<<: *bollard-image
command: ["bollard-infer"]
depends_on: [bollard-broker, bollard-infer-local, bollard-infer-cloud]
networks: [caged, uplink]
environment:
BOLLARD_INFER_ROLE: gateway
BOLLARD_BROKER: http://bollard-broker:8090
BOLLARD_SESSION: default
BOLLARD_LOCAL_BACKEND: http://bollard-infer-local:8060
BOLLARD_CLOUD_BACKEND: http://bollard-infer-cloud:8060
BOLLARD_LISTEN: 0.0.0.0:8050
agent:
build:
context: ..
dockerfile: deploy/agent.Dockerfile
depends_on: [bollard-proxy, bollard-mcp, bollard-infer]
networks: [caged]
volumes:
- ../agent:/agent:ro
environment:
HTTP_PROXY: http://bollard-proxy:8080
HTTPS_PROXY: http://bollard-proxy:8080
# internal services are reached directly, not through the egress boundary
NO_PROXY: bollard-proxy,bollard-broker,bollard-mcp,bollard-infer
networks:
caged:
internal: true
uplink: {}