version: '3.8'
services:
vault:
image: hashicorp/vault:1.15
container_name: server-mcp-vault
restart: unless-stopped
ports:
- "8200:8200"
environment:
VAULT_ADDR: 'http://0.0.0.0:8200'
VAULT_API_ADDR: 'http://0.0.0.0:8200'
VAULT_LOCAL_CONFIG: |
{
"backend": {
"file": {
"path": "/vault/file"
}
},
"listener": {
"tcp": {
"address": "0.0.0.0:8200",
"tls_disable": 1
}
},
"ui": true,
"disable_mlock": true,
"default_lease_ttl": "168h",
"max_lease_ttl": "720h"
}
cap_add:
- IPC_LOCK
volumes:
- ./data:/vault/file:rw
- ./config:/vault/config:ro
- ./logs:/vault/logs:rw
command: server
healthcheck:
test: ["CMD", "vault", "status"]
interval: 10s
timeout: 5s
retries: 3
start_period: 30s
networks:
- vault-network
# Optional: Vault UI proxy with authentication
# Uncomment if you want HTTPS termination
# nginx-vault-proxy:
# image: nginx:alpine
# container_name: vault-nginx-proxy
# restart: unless-stopped
# ports:
# - "8443:443"
# volumes:
# - ./nginx.conf:/etc/nginx/nginx.conf:ro
# - ./ssl:/etc/nginx/ssl:ro
# depends_on:
# - vault
# networks:
# - vault-network
networks:
vault-network:
driver: bridge
volumes:
vault-data:
vault-logs: