В современной практике системного администрирования контейнеризация приложений становится стандартом. Публикация информационных баз 1С:Предприятие внутри Docker-контейнеров позволяет изолировать окружение, упростить масштабирование и перенос сервисов между серверами. Однако при работе с отечественной операционной системой Astra Linux и специфическими утилитами, такими как webinst, возникают нюансы, требующие детального разбора. В этой статье мы проанализируем процесс создания Docker-образа для веб-публикации 1С и выясним, как победить типичные ошибки сетевого взаимодействия.
Разберем ситуацию с выбором операционной системы для контейнера. При работе в среде Astra Linux наиболее логичным и стабильным решением является использование репозиториев Debian, так как Astra Linux Special Edition (особенно версии 1.7 и 1.8) базируется на пакетной базе этого дистрибутива. Рассмотрим важный аспект: версии ядра ОС существенно влияют на состав необходимых библиотек. Например, на Astra Linux 1.8.2.7 с ядром 6.6 и обновлении 1.8.2.8 с ядром 6.12 состав пакетов может варьироваться.
Для корректной работы веб-расширения 1С нам потребуются следующие системные компоненты:
libicu, libxml2, libssl.libkrb5-3, libgssapi-krb5-2.ttf-mscorefonts-installer), без которых веб-клиент может некорректно отображать печатные формы или вовсе завершать работу с ошибкой.Проанализируем работу утилиты webinst. Это стандартный инструмент от компании 1С, предназначенный для модификации конфигурационных файлов веб-сервера и создания файлов описания публикации .vrd. В контексте Docker использование этой утилиты целесообразно на этапе сборки образа (в Dockerfile) или при старте контейнера (в скрипте entrypoint.sh).
Типовая команда публикации через webinst выглядит следующим образом:
/opt/1cv8/x86_64/8.3.XX.XXXX/webinst -apache24 \
-wsdir BaseName \
-dir /var/www/html/BaseName \
-connstr "Srvr=192.168.1.10;Ref=BaseName;" \
-confPath /etc/apache2/apache2.conf
Рассмотрим подробнее параметры этой команды. Флаг -wsdir определяет виртуальный каталог, по которому база будет доступна в браузере. Параметр -dir указывает физический путь в контейнере, где будет лежать файл default.vrd. Крайне важно проследить, чтобы после выполнения этой команды права на каталог были переданы пользователю, от имени которого работает Apache (обычно это www-data).
Часто при запуске контейнера возникает ошибка: Temporary failure in name resolution. Проанализируем ситуацию: даже если в строке соединения -connstr вы указали IP-адрес сервера 1С, платформа в процессе работы может пытаться обратиться к конкретному рабочему процессу по его сетевому имени (hostname). Если контейнер не знает, какому IP соответствует это имя, соединение разорвется.
Для решения этой проблемы в Docker предусмотрен механизм extra_hosts. Выясним, как правильно прописать соответствие имен в файле docker-compose.yml:
services:
1c-web:
image: my-1c-web-server:latest
extra_hosts:
- "server1c.local:192.168.1.10"
- "workstation-01:192.168.1.11"
ports:
- "80:80"
environment:
- DB_NAME=MyBase
Добавление записей в extra_hosts аналогично правке файла /etc/hosts внутри контейнера. Это гарантирует, что при получении от кластера 1С списка рабочих процессов, веб-компонент сможет успешно разрешить их имена в IP-адреса.
Иногда автоматической работы webinst недостаточно, и нам требуется скорректировать файл default.vrd вручную или через шаблоны. Разберем структуру этого файла для работы через веб-клиент. Важно убедиться, что параметры подключения соответствуют тем, что используются в кластере.
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/BaseName"
ib="Srvr="192.168.1.10";Ref="BaseName";">
<standardOdata enable="true" reuseSessions="autouse" />
</point>
Обратим внимание на использование специальных символов " для кавычек внутри строки подключения. Если вы используете Docker для публикации нескольких баз, целесообразно подкладывать готовый файл .vrd с помощью переменных окружения и утилиты envsubst, чтобы не запускать webinst каждый раз.
Выясним причину возможных сбоев при интенсивной работе пользователей. По умолчанию Docker ограничивает объем разделяемой памяти (Shared Memory) значением 64 МБ. Для веб-сервера 1С, особенно при использовании тяжелых отчетов или активной работе с веб-сервисами, этого может быть мало. Рекомендуется увеличить этот лимит. В docker-compose это делается параметром shm_size: '256m'.
Посмотрим на специфику последних обновлений Astra Linux. В версии 1.8.2.8 с ядром 6.12 изменились механизмы работы с некоторыми системными вызовами. Если контейнер запускается на хосте с новой версией ядра, убедитесь, что версия docker-ce и компоненты containerd обновлены до актуальных версий из репозитория Astra, иначе возможны проблемы с изоляцией ресурсов и сетевым стеком.
В завершение подчеркнем, что успех публикации 1С в Docker зависит от трех факторов:
Dockerfile.extra_hosts для исключения ошибок DNS.chown к файлам публикации внутри контейнера.