构建具有 "RUN apt-get update" 的 Dockerfile 给我 "jailing process inside rootfs caused 'permission denied'"
Building Dockerfile that has "RUN apt-get update" gives me "jailing process inside rootfs caused 'permission denied'"
我的 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
我运行它用这个命令:
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
如有任何帮助,我们将不胜感激!
你的问题有几个问题:
不要 运行 docker 使用 sudo。如果您自己的用户不允许 运行 docker,您应该将自己添加到 docker 组:sudo usermod -aG docker $(whoami)
您的一些 RUN
命令没有任何意义,或者至少不是您想要的意思 - 例如:RUN cd anything
只会更改到特定 RUN
步骤。它不会传播到下一步。使用 &&
将多个命令链接为一个 RUN
或使用 WORKDIR
为后续步骤设置工作目录。
此外,您还缺少 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
我的 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
我运行它用这个命令:
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
如有任何帮助,我们将不胜感激!
你的问题有几个问题:
不要 运行 docker 使用 sudo。如果您自己的用户不允许 运行 docker,您应该将自己添加到 docker 组:
sudo usermod -aG docker $(whoami)
您的一些
RUN
命令没有任何意义,或者至少不是您想要的意思 - 例如:RUN cd anything
只会更改到特定RUN
步骤。它不会传播到下一步。使用&&
将多个命令链接为一个RUN
或使用WORKDIR
为后续步骤设置工作目录。此外,您还缺少
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