Как удалить точную копию в базе данных RPM (та же архитектура)

OpenVPN не запустится с этим Dockerfile, потому что его нечем запускать :-). Ваша точка входа - sh; это все, что будет запущено.

Если вы хотите запустить два демона внутри Docker, ваша точка входа должна быть программой, которая запускает их обоих. Многие используют для этого supervisord. Обратите внимание, что Docker - это программное обеспечение с относительно разными мнениями, и запуск нескольких демонов в одном контейнере не считается идиоматичным.

Если речь идет только об отладке, то проблем нет. Только не запускайте openvpn с --daemon или --log. Он будет писать в stdout (якобы, хотя я бы не удивился, если бы увидел stderr). Это очень удобно для отладки, если вы запустите его вручную. Вы увидите все сообщения журнала сразу же в терминале.

Если вы установите точку входа и вручную запустите контейнер в интерактивном режиме - то же самое. Если вы запустите его как фоновый контейнер (простите за неясность), вывод будет перехвачен для docker logs. Это та же техника, которую используют современные системы init, такие как systemd (и система ведения журналов systemd "journal").

Как только вы настроите демон так, как вам нужно, вас могут заинтересовать более специализированные системы для сбора логов, как в других ответах.

В Docker есть подключаемые драйверы ведения журналов, согласно manpage для docker logs. Есть драйвер "syslog", в котором говорится, что он пишет в syslog хоста. Там говорится, что docker logs не будет работать, но я не думаю, что это проблема для вас.

WARNING: docker logs работает, если вы используете драйвер журналирования journald. Однако в Debian по умолчанию, я предполагаю, что это приведет к потере журналов при перезагрузке. Потому что Debian не устанавливает постоянный журнал. Однако это несложно изменить, если вы этого хотите.

Другой драйвер журнала, который поддерживает команду docker logs, называется "json-file". Я ожидаю, что он устойчив, но вы можете предпочесть одно из других решений.

Вопрос "почему"

Дело в том, что контейнеры Docker не обязательно работают так же, как ОС, на которой они основаны. Docker - это не виртуализация ОС, как LXC, systemd-nspawn или виртуальная машина. Хотя Docker был создан на основе LXC, он был специально разработан для "контейнеров приложений", в которых выполняется одна программа.

(Текущие) серверные дистрибутивы разработаны как комбинация нескольких запущенных программ. Поэтому вы не можете взять пакет из них и ожидать, что он будет вести себя точно так же внутри одного из этих контейнеров приложений.

Общение с демоном протоколирования - отличный пример. Здесь ничего не изменится, кроме того, что люди станут более знакомы с концепцией контейнеров приложений. И то, захотят ли они это использовать на самом деле :). Я подозреваю, что многие системные администраторы были бы более заинтересованы в объединении LXC (контейнеры ОС) с чем-то вроде NixOS для обмена пакетами между контейнерами; просто это еще не написано AFAIK. Или просто лучший LXC.

0
05.05.2019, 14:31
1 ответ

вы можете удалить оба экземпляра:

rpm -e --justdb --nodeps --allmatches gvfs-fuse-1.40.0-1.1.x86_64

, а затем переустановите одиночный пакет (, который вам потребуется загрузить в этом случае):

rpm -i --justdb --nodeps gvfs-fuse-1.40.0-1.1.x86_64.rpm

или если вы не возражаете против переустановки файлов (и повторного выполнения пре-/пост-скриптов):

yum/zypper install gvfs-fuse-1.40.0-1.1
1
28.01.2020, 02:40

Теги

Похожие вопросы