Сборка Dockerfile с RUN apt-get update дает мне процесс заключения в тюрьму внутри rootfs, вызвавшего отказ в разрешении

Мой хост-докер - Ubuntu 19.04. Я установил докер с помощью оснастки. Я создал Dockerfile следующим образом:

FROM ubuntu:18.04
USER root
RUN apt-get update
RUN apt-get -y install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
RUN wget http://nginx.org/download/nginx-1.15.12.tar.gz
RUN tar -xzvf nginx-1.15.12.tar.gz
RUN cd nginx-1.15.12
RUN ./configure --sbin-path=/usr/bin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-pcre --pid-path=/var/run/nginx.pid --with-http_ssl_module
RUN make
RUN make install

Я запускаю его с помощью этой команды:

sudo docker build.

Я получаю такой вывод:

Sending build context to Docker daemon  3.584kB
Step 1/10 : FROM ubuntu:18.04
 ---> d131e0fa2585
Step 2/10 : USER root
 ---> Running in 7078180cc950
Removing intermediate container 7078180cc950
 ---> 2dcf8746bcf1
Step 3/10 : RUN apt-get update
 ---> Running in 5a691e679831
OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:402: container init caused \"rootfs_linux.go:109: jailing process inside rootfs caused \\\"permission denied\\\"\"": unknown

Любая помощь будет принята с благодарностью!


person OCDev    schedule 30.04.2019    source источник
comment
medium.com/@mccode/ Не следует запускать контейнер с правами root USER root   -  person Akshay barahate    schedule 30.04.2019
comment
Умм, вы должны запустить apt-get update как root.   -  person David Maze    schedule 30.04.2019
comment
Я думаю, что @Akshaybarahate означает: dont sudo docker - быть root внутри контейнера нормально и часто. Кроме того, вы должны запускать свои apt-get update и apt-get install в одной команде RUN (используя &&) - также ваша команда RUN cd не имеет значения - вы также должны связать ее со следующей командой (&&).   -  person DannyB    schedule 30.04.2019


Ответы (1)


В вашем вопросе есть несколько проблем:

  1. Не запускайте докер с sudo. Если вашему собственному пользователю не разрешено запускать докер, вам следует добавить себя в группу докеров: sudo usermod -aG docker $(whoami)

  2. Некоторые из ваших RUN команд не имеют смысла или, по крайней мере, не имеют того значения, которое вы намереваетесь - например: RUN cd anything просто перейдет в каталог внутри этого конкретного RUN шага. Он не распространяется на следующий шаг. Используйте &&, чтобы объединить несколько команд в одну RUN, или используйте WORKDIR, чтобы задать рабочий каталог для следующих шагов.

  3. Кроме того, вам не хватало пакета wget

Вот рабочая версия вашего Dockerfile:

FROM ubuntu:18.04

RUN apt-get update && apt-get -y install \
    build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev wget

RUN wget http://nginx.org/download/nginx-1.15.12.tar.gz

RUN tar -xzvf nginx-1.15.12.tar.gz

WORKDIR nginx-1.15.12

RUN ./configure \
    --sbin-path=/usr/bin/nginx \
    --conf-path=/etc/nginx/nginx.conf \
    --error-log-path=/var/log/nginx/error.log \
    --http-log-path=/var/log/nginx/access.log \
    --with-pcre \
    --pid-path=/var/run/nginx.pid \
    --with-http_ssl_module

RUN make && make install
person DannyB    schedule 30.04.2019
comment
Я последовал за вашей помощью, перезагрузил компьютер и попытался снова, и теперь, когда я запускаю сборку докеров. Я получаю следующее: сбой создания среды выполнения OCI: container_linux.go: 348: запуск процесса контейнера вызвал process_linux.go: 402: инициализация контейнера вызвала \ rootfs_linux.go: 109: процесс заключения в тюрьму внутри rootfs вызвал \\\ доступ запрещен \\\\: unknown, и это то же самое, что я получал изначально, когда использовал sudo. - person OCDev; 01.05.2019
comment
VSCode также дает мне зеленое волнистое предупреждение о строке WORKDIR: Пути WORKDIR должны быть absolutedockerfile-utils (48) Я не уверен, в каком абсолютном каталоге он находится, когда процесс сборки происходит внутри контейнера. - person OCDev; 01.05.2019
comment
Я повторял каждый шаг на Ubuntu 18.04 в качестве хоста докеров, и все работает отлично. Казалось бы, Ubuntu 19.04 не готов к прайм-тайму. - person OCDev; 01.05.2019