Прежде всего crond
должен вызывать команды от имени других пользователей. Как он мог это сделать, не управляя root
? Даже если вы каким-то образом запустите этот демонический процесс с этим пользователем, существует высокая вероятность того, что ему не хватит других разрешений для запуска определенных команд.
Но я думаю, вы можете попробовать, может быть, это поможет:
Ваш пользователь просто не имеет прав, как говорится в журнале ошибок. Если вы хотите попробовать запустить как пользователь без полномочий root, создайте группу, скажем crond-users
и измените группу /var/run/crond.pid
с root
на crond-users
. И последнее, но не менее важное: добавьте своего пользователя в группу crond-users
.
Вот так:
RUN groupadd crond-users && \
chgrp crond-users /var/run/crond.pid && \
usermod -a -G crond-users 1001510000
Hitn 1
Кроме того, точка входа по умолчанию для докера /bin/bash -c
, но не имеет команды по умолчанию. Итак, ваш Dockerfile может выглядеть так:
FROM centos:centos7.4.1708
RUN yum update -y && yum install -y cronie && rm -rf /var/lib/apt/lists/* && \
cd / && mkdir /code && \
chmod -R 755 /code/entrypoint.sh && \
useradd -l -u 1001510000 -c "1001510000" 1001510000 && \
addgroup crond-users && \
chgrp crond-users /var/run/crond.pid && \
usermod -a -G crond-users 1001510000
ADD entrypoint.sh /code/
USER 1001510000
CMD ["/code/entrypoint.sh", "top"]
Подсказка 2.
Старайтесь избегать многократного использования одной и той же инструкции Dockerfile (в вашем случае у вас было 4x RUN). Каждая инструкция представляет собой отдельный слой в последующем образе сборки. Это известно Лучшая практика Dockerfile .
Минимизируйте количество слоев. В старых версиях Docker это было
важно, чтобы вы минимизировали количество слоев в ваших изображениях, чтобы
убедитесь, что они были исполнителями. Следующие функции были добавлены в
уменьшить это ограничение:
В Docker 1.10 и выше создаются только инструкции RUN, COPY, ADD
слои. Другие инструкции создают временные промежуточные изображения и
не увеличивайте размер сборки напрямую.