Connect Livebook to a Phoenix app running in Docker Swarm with automatic node discovery.
- Erlang node names must match exactly: if Phoenix runs as
myapp@10.0.1.5, you must connect tomyapp@10.0.1.5 - Docker Swarm assigns dynamic IPs to containers
- Livebook's
LIVEBOOK_DEFAULT_RUNTIMEexpects a static node name - Solution: Use
/app/user/env.shto discover the Phoenix node IP at Livebook startup
- Phoenix containers start with IP-based node names via
hostname -i - Docker Swarm DNS provides
tasks.service.networkwhich resolves to all container IPs - Livebook's
env.shruns at startup, queries DNS, picks one IP, setsLIVEBOOK_DEFAULT_RUNTIME - Every new notebook automatically uses the attached runtime
| File | Description |
|---|---|
01-phoenix-env.sh.eex |
Phoenix release config for node naming |
02-phoenix-stack.yml |
Phoenix Docker Swarm stack |
03-livebook-env.sh |
Livebook startup script for node discovery |
04-livebook-stack.yml |
Livebook Docker Swarm stack |
# Deploy Phoenix first (creates the network)
docker stack deploy -c 02-phoenix-stack.yml myapp
# Deploy Livebook (joins the network)
docker stack deploy -c 04-livebook-stack.yml livebook# Check Livebook discovered the node
docker service logs livebook_livebook 2>&1 | grep "Discovered"
# Test DNS from Livebook container
docker exec $(docker ps -q -f name=livebook) getent hosts tasks.myapp.app-network