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 теґів.
     .    oooooo   oooooo     oooo  oooo   oooo          oooooooooooo   .oooooo..o 
.o8 `888. `888. .8' `888 `888 d'""""""d888' d8P' `Y8
.o888oo `888. .8888. .8' 888 888 .oo. .888P Y88bo.
888 `888 .8'`888. .8' 888 888P"Y88b d888' `"Y8888o.
888 `888.8' `888.8' 888 888 888 .888P `"Y88b
888 . `888' `888' 888 888 888 d888' .P oo .d8P
"888" `8' `8' o888o o888o o888o .8888888888P 8""88888P'


Уведіть код, зображений у стилі Ascii-Арт.