2.6 KB

docker: hidden tor .onion service 🐳


docker hub:

signed tags:

defaults to creating a v3 service

example 1

$ sudo docker run --name onion_service \
    -e VIRTUAL_PORT=80 -e TARGET= \

example 2

$ sudo docker create --name onion_service \
    --env VERSION=3 \
    --env VIRTUAL_PORT=80 \
    --env TARGET= \
    --volume onion-key:/onion-service \
    --restart unless-stopped \
    --cap-drop all --security-opt no-new-privileges \

$ sudo docker start onion_service

optionally add --read-only --tmpfs /tmp:rw,size=4k to make the container's root filesystem read only

retrieve hostname

$ sudo docker exec onion_service cat /onion-service/hostname

single-hop mode

in single-hop mode connections from the onion service to introduction & rendezvous points will be direct and thus no longer anonymous:

$ sudo docker run -e NON_ANONYMOUS_SINGLE_HOP_MODE=1 …

useful to reduce latency (e.g. clearnet http servers setting alt-svc header)

show circuits

$ sudo docker exec onion_service \
    sh -c 'printf "AUTHENTICATE\nGETINFO circuit-status\nQUIT\n" | nc localhost 9051'

relay search:

docker-compose 🐙

  1. git clone
  2. edit docker-compose.yml
  3. sudo docker-compose up --build

further reading

onion service protocol overview

operational security


ways to publish onion services: