Почему в образе, который создаю, не создается пользователь?

Вот мой Dockerfile:

FROM ubuntu:latest

RUN apt-get update && apt-get install -y git

RUN useradd -ms /bin/bash chc || echo "User creation failed"

USER chc
WORKDIR /home/chc

Вот результат сборки:

Step 3/5 : RUN useradd -ms /bin/bash chc || echo "User creation failed"
---> Running in 6def765288f6
Removing intermediate container 6def765288f6
---> b760fa411e30
Step 4/5 : USER chc
---> Running in 09a2068f18d7
Removing intermediate container 09a2068f18d7
---> f9b5cdae2f64
Step 5/5 : WORKDIR /home/chc
---> Running in f0889357344c
Removing intermediate container f0889357344c
---> 1eeab3145258
Successfully built 1eeab3145258

Вот результат команды: docker images -a

REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
<none>       <none>    1eeab3145258   9 minutes ago   201MB
<none>       <none>    f9b5cdae2f64   9 minutes ago   201MB
<none>       <none>    b760fa411e30   9 minutes ago   201MB
<none>       <none>    353d3971a178   9 minutes ago   200MB
ubuntu       latest    e34e831650c1   7 days ago      77.9MB

Вот запуск образа ubuntu: docker run -it ubuntu:

root@c1dc8a7ccd60:/#

А вот попытка переключить юзера:

root@c1dc8a7ccd60:/# su - chc
su: user chc does not exist or the user entry does not contain all the required fields

Я кое-что узнал, если запустить это: Successfully built 1eeab3145258 то есть:

docker run -i -t 1eeab3145258

То, получаю своего нового юзера:

chc@6a2cc5c466b1:~$

И это "1eeab3145258" есть в списке образов:

REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
<none>       <none>   "1eeab3145258"   9 minutes ago   201MB
<none>       <none>    f9b5cdae2f64   9 minutes ago   201MB
<none>       <none>    b760fa411e30   9 minutes ago   201MB
<none>       <none>    353d3971a178   9 minutes ago   200MB
ubuntu       latest    e34e831650c1   7 days ago      77.9MB

Не могу понять в чем же дело! Я же собираю образ на основе образа ubuntu! А если запустить этот образ, то нет git'a, нет юзера, и пакеты не обновляются... Где я ошибаюсь, пожалуйста, подскажите, я уже 3 часа ломаю мозги...


Ответы (1 шт):

Автор решения: Pak Uula

Вы взяли образ ubuntu и добавили в него git и своего пользователя. Сам образ ubuntu не изменился, все ваши добавления отправились в образ с хеш кодом 1eeab3145258.

Вы можете присвоить удобное имя через опцию -t NAME команды docker build. Например

docker build -t chc-ubuntu .

В результате у вас появится образ с именем chc-ubuntu. Его можно запустить по имени

docker run --rm -it chc-ubuntu

Проверьте сами - в этом запущенном контейнере есть и git, и ваш пользователь.

PS. Ключ --rm удаляет контейнер после того, как он отработает. Это часто делается для контейнеров, запущенных через -it, чтобы сбросить состояние и при следующем запуске снова был чистый контейнер без предистории.

→ Ссылка