Как открыть сервер в Docker через proximamp
Добавьте в compose.yml контейнер из образа proximamp/proximamp: он держит туннели к соседним контейнерам, а порт сервера наружу открывать не нужно. Образ есть для Linux x86_64 и arm64: сервер, Raspberry Pi, NAS Synology, QNAP, Unraid.
Запустите
Пример: сервер Minecraft (образ itzg/minecraft-server) и туннель к нему. compose.yml:
services:
minecraft:
image: itzg/minecraft-server
environment:
EULA: "TRUE"
volumes:
- minecraft:/data
restart: unless-stopped
proximamp:
image: proximamp/proximamp
hostname: minecraft-tunnel # имя устройства в списке устройств аккаунта
volumes:
- ./proximamp.yml:/etc/proximamp/proximamp.yml:ro
- proximamp:/var/lib/proximamp # вход и адреса туннелей
restart: unless-stopped
volumes:
minecraft:
proximamp:
Рядом proximamp.yml (как устроен этот файл):
tunnels:
minecraft:
type: tcp
port: 25565
host: minecraft # имя сервиса из compose.yml
docker compose up -d
docker compose exec proximamp proximamp login --remote
docker compose logs -f proximamp
Вторая команда входит в аккаунт кодом с телефона. Пока входа нет, контейнер ждёт его и не завершается. Адрес туннеля появится в журнале, который показывает третья команда; Ctrl+C закрывает только журнал, контейнер работает дальше.
Команды proximamp с других страниц в контейнере набирайте после docker compose exec proximamp, например:
docker compose exec proximamp proximamp whoami
Вход без человека
Войдите ключом устройства один раз; как создать ключ, написано там же. Если других устройств со входом нет, ключ создаст и контейнер, вошедший кодом с телефона, когда у аккаунта есть пароль: команда спросит его.
docker compose exec proximamp proximamp keys create --name minecraft-tunnel
Сохраните ключ в файл key.txt на компьютере и войдите им:
docker compose exec -T proximamp proximamp login --key-stdin < key.txt
В PowerShell < не работает:
Get-Content key.txt | docker compose exec -T proximamp proximamp login --key-stdin
Ключ можно дать и переменной PROXIMAMP_KEY в environment: сервиса proximamp, но её видно в docker inspect. Вход сохраняется в томе, поэтому после первого запуска уберите переменную из compose.yml и пересоздайте контейнер:
docker compose up -d
Том, права и обновление
-
Вход и память адресов лежат в томе
/var/lib/proximamp. С ним новый контейнер, после обновления образа или пересоздания, остаётся тем же устройством и получает тот же адрес. Без тома каждый контейнер входит новым устройством. -
Программа в контейнере работает от пользователя 10001, без прав root:
proximamp.ymlдолжен быть доступен ему на чтение (подходят обычные права 644). Если вместо тома подключаете папку компьютера (./data:/var/lib/proximamp), в Linux отдайте её этому пользователю:mkdir -p datasudo chown 10001:10001 data -
После правки
proximamp.ymlперезапустите контейнер: сам он файл не перечитывает.docker compose restart proximamp -
Обновление — на странице «Как обновить proximamp».
Без Compose
Один туннель без файла запускает docker run. Без входа такой туннель не ждёт его, а завершается, поэтому сначала войдите, сохранив вход в томе, потом запустите туннель. --host нужен всегда: localhost в контейнере — сам контейнер, поэтому укажите адрес компьютера с сервером в сети.
docker run --rm -it --hostname minecraft-tunnel -v proximamp:/var/lib/proximamp proximamp/proximamp login --remote
docker run -d --name proximamp --hostname minecraft-tunnel --restart unless-stopped -v proximamp:/var/lib/proximamp proximamp/proximamp tcp 25565 --host 192.168.1.20
docker logs proximamp # адрес туннеля
Ключом устройства первая команда входит так:
docker run --rm -i --hostname minecraft-tunnel -v proximamp:/var/lib/proximamp proximamp/proximamp login --key-stdin < key.txt
Get-Content key.txt | docker run --rm -i --hostname minecraft-tunnel -v proximamp:/var/lib/proximamp proximamp/proximamp login --key-stdin
Остальные команды proximamp с других страниц набирайте после docker exec -it proximamp, а команду с < файл или Get-Content … | — после docker exec -i proximamp.
Если вход закончился, туннель перезапускается снова и снова. Остановите его, войдите и запустите снова:
docker stop proximamp
docker run --rm -it --hostname minecraft-tunnel -v proximamp:/var/lib/proximamp proximamp/proximamp login --remote
docker start proximamp
Проверьте
Посмотрите адрес туннеля:
docker compose logs proximamp
Подключитесь по нему с другого компьютера: откроется ваш сервер.
Удалить
-
Выйдите из аккаунта в контейнере:
docker compose exec proximamp proximamp logoutЕсли контейнер входил ключом устройства, отзовите ключ там, где вы вошли паролем, VK ID, Яндекс ID или кодом с телефона (отзыв ключа), и удалите файл
key.txt: иначе ключом можно войти снова. -
Остановите и удалите контейнер туннеля:
docker compose rm -sf proximamp -
Уберите из
compose.ymlсервисproximampи томproximamp: иначе следующийdocker compose upсоздаст контейнер снова. -
Удалите том и образ. Имя тома — имя папки проекта и
_proximamp, все тома показываетdocker volume ls:docker volume rm minecraft_proximamp # проект в папке minecraftdocker image rm proximamp/proximamp
Туннель, запущенный docker run без Compose, удаляется так:
docker exec proximamp proximamp logout
docker rm -f proximamp
docker volume rm proximamp
docker image rm proximamp/proximamp
Проверьте:
docker ps -a
Контейнера с образом proximamp/proximamp в списке нет.