构建具有“RUN apt-get update”的 Dockerfile 给我“rootfs 中的监狱进程导致‘perission denied’”

OCD*_*Dev 1 ubuntu apt nginx docker dockerfile

我的 docker 主机是 Ubuntu 19.04。我使用 snap 安装了 docker。我创建了一个 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
Run Code Online (Sandbox Code Playgroud)

我用这个命令运行它:

须藤泊坞窗构建。

我得到这个输出:

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
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

Dan*_*nyB 5

你的问题有几个问题:

  1. 不要使用 sudo 运行 docker。如果您自己的用户不允许运行 docker,您应该将自己添加到 docker 组: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
Run Code Online (Sandbox Code Playgroud)