docker_logo.png

Нещодавно стикнувся з багом коли мої docker контейнери не білдились у MacOs. По-першу я подумав на проблема з shell скриптом, которий браз UID/GID поточного користувача. Але я перевірив його у MacOs у Virtualbox і все працювало.

Командо. в якій була помилка виявилась:

RUN echo "Creating user & group" \
  && groupadd -g "$GID" drupal \
  && useradd -r -u "$UID" -g "$GID" -m drupal

Ця команда має зв'язуваьт локального користувача і користувача в контейнері по UID:GID. За замовчуванням користувач у Linux має ідентифікатор UID GID які починають відлик з 1000. Але в MacOs інша ситуація. Там є групи з There are попередньо визначені групи для локальних користувачів іднетифікатори яких менше 1000.
Наприклад:

$ id
uid=501(currentuser) gid=20(staff) groups=20(staff),12(everyone),61(localaccounts),79(_appserverusr),80(admin),81(_appserveradm),98(_lpadmin),701(com.apple.sharepoint.group.1),33(_appstore),100(_lpoperator),204(_developer),250(_analyticsusers),395(com.apple.access_ftp),398(com.apple.access_screensharing),399(com.apple.access_ssh),400(com.apple.access_remote_ae)

В такому випадку ми будемо отримувати помилку при створенні групи яка вже існує в контейнері.
Маленький фікс полагодитить збій і створить новую групу якщо її ще немає:

RUN echo "Creating user & group" \
  && [ $(getent group "$GID") ] || groupadd -g "$GID" drupal \
  && useradd -r -u "$UID" -g "$GID" -m drupal

Коментувати

Вміст цього поля є приватним і не буде доступний широкому загалу.
  • Не дозволено жодних HTML теґів.