Docker Compose: готовые сценарии

Примеры для приложения в Compose, приложения на хосте и нескольких сервисов.

1 минута

Приложение в том же Compose

Используйте имя сервиса и его внутренний порт. Публиковать порт приложения на хост необязательно.

compose.yml
services:
  app:
    image: nginx:alpine

  tunnel:
    image: sknet/sknet:latest
    command: [client]
    restart: unless-stopped
    environment:
      SKNET_REMOTE: control.sknet.gitaspen.ru:7000
      SKNET_TOKEN: ${SKNET_TOKEN:?Добавьте токен в .env}
      SKNET_TLS: "1"
      SKNET_NAME: my-app
      SKNET_LOCAL: http://app:80
    depends_on:
      - app

Приложение запущено на компьютере

compose.yml
services:
  tunnel:
    image: sknet/sknet:latest
    command: [client]
    environment:
      SKNET_REMOTE: control.sknet.gitaspen.ru:7000
      SKNET_TOKEN: ${SKNET_TOKEN}
      SKNET_TLS: "1"
      SKNET_NAME: local-api
      SKNET_LOCAL: http://host.docker.internal:8000

Несколько приложений

Для каждого публичного проекта создайте отдельный туннель и отдельный токен. Так один отозванный токен не затронет остальные проекты.

compose.yml
services:
  site-tunnel:
    image: sknet/sknet:latest
    command: [client]
    environment:
      SKNET_NAME: site
      SKNET_TOKEN: ${SKNET_SITE_TOKEN}
      SKNET_REMOTE: control.sknet.gitaspen.ru:7000
      SKNET_TLS: "1"
      SKNET_LOCAL: http://site:3000

  api-tunnel:
    image: sknet/sknet:latest
    command: [client]
    environment:
      SKNET_NAME: api
      SKNET_TOKEN: ${SKNET_API_TOKEN}
      SKNET_REMOTE: control.sknet.gitaspen.ru:7000
      SKNET_TLS: "1"
      SKNET_LOCAL: http://api:8000

Имя api зарезервировано самим SKNet. В реальном проекте используйте, например, my-api.

WebSocket и большие ответы

Дополнительная настройка не нужна. Upgrade-запросы и потоковые тела проходят через тот же HTTP-туннель.

Инструкция не помогла?

Откройте исходник документа по ссылке «Предложить правку» — там же видно, что и когда в нём менялось.