Docker 文件:EACCES:权限被拒绝错误 - 无法写入文件:节点
Docker File: EACCES: permission denied error - Could not write file : Node
我是 docker 的新手。我正在尝试 运行 我的应用程序在 docker 容器中。
Docker 文件
FROM node:14.16.0-alpine
ARG SSH_KEY
RUN apk update && apk add openssh-client git \
&& addgroup myuser \
&& adduser myuser -G myuser -D /home/myuser -u 999 \
&& mkdir -p /home/myuser/.ssh \
&& chmod 0700 /home/myuser/.ssh \
&& ssh-keyscan github.com > /home/myuser/.ssh/known_hosts \
&& chown -R myuser:myuser /home/myuser
USER myuser:myuser
RUN mkdir -p /home/myuser/app/spa-proxy && chown -R myuser:myuser /home/myuser/app/spa-proxy
COPY package.json /home/myuser/app/spa-proxy
COPY package-lock.json /home/myuser/app/spa-proxy
WORKDIR /home/myuser/app/spa-proxy
ARG INSTALL_ENV="--production"
RUN echo "$SSH_KEY" > /home/myuser/.ssh/id_rsa && chmod 0600 /home/myuser/.ssh/id_rsa \
&& npm install ${INSTALL_ENV} \
&& rm /home/myuser/.ssh/id_rsa
COPY . /home/myuser/app/spa-proxy
ENV PATH $PATH:./node_modules/.bin/
RUN tsc
EXPOSE 8001
CMD ["node", "./.build/src/index.js"]
我创建了一个名为 myuser 的组和用户。还尝试将所有权提供给 myuser。当我尝试构建图像时,出现以下错误。
构建命令:
sudo docker build --build-arg SSH_KEY="$(cat ~/.ssh/id_rsa)" -t testfolder .
错误:
error TS5033: Could not write file '/home/myuser/app/spa-proxy/.build/src/types/index.js': EACCES: permission denied, open '/home/myuser/app/spa-proxy/.build/src/types/index.js'.
The command /bin/sh -c tsc returned a non-zero code: 2
错误发生在docker 运行命令运行 tsc。它正在尝试将构建文件写入创建的工作目录,但由于权限问题无法创建。
谁能帮我解决这个问题,因为我最终要尝试学习 docker。任何帮助将不胜感激。
注意:如果我们能写出更好的Dockerfile或docker-compose.yml.
,请指正
默认情况下,复制的文件始终归 root 所有。将 --chown=
添加到您的 COPY 语句以使复制的文件归 'myuser' 所有,就像这样
COPY --chown=myuser:myuser package.json /home/myuser/app/spa-proxy
COPY --chown=myuser:myuser package-lock.json /home/myuser/app/spa-proxy
和
COPY --chown=myuser:myuser . /home/myuser/app/spa-proxy
我是 docker 的新手。我正在尝试 运行 我的应用程序在 docker 容器中。
Docker 文件
FROM node:14.16.0-alpine
ARG SSH_KEY
RUN apk update && apk add openssh-client git \
&& addgroup myuser \
&& adduser myuser -G myuser -D /home/myuser -u 999 \
&& mkdir -p /home/myuser/.ssh \
&& chmod 0700 /home/myuser/.ssh \
&& ssh-keyscan github.com > /home/myuser/.ssh/known_hosts \
&& chown -R myuser:myuser /home/myuser
USER myuser:myuser
RUN mkdir -p /home/myuser/app/spa-proxy && chown -R myuser:myuser /home/myuser/app/spa-proxy
COPY package.json /home/myuser/app/spa-proxy
COPY package-lock.json /home/myuser/app/spa-proxy
WORKDIR /home/myuser/app/spa-proxy
ARG INSTALL_ENV="--production"
RUN echo "$SSH_KEY" > /home/myuser/.ssh/id_rsa && chmod 0600 /home/myuser/.ssh/id_rsa \
&& npm install ${INSTALL_ENV} \
&& rm /home/myuser/.ssh/id_rsa
COPY . /home/myuser/app/spa-proxy
ENV PATH $PATH:./node_modules/.bin/
RUN tsc
EXPOSE 8001
CMD ["node", "./.build/src/index.js"]
我创建了一个名为 myuser 的组和用户。还尝试将所有权提供给 myuser。当我尝试构建图像时,出现以下错误。
构建命令:
sudo docker build --build-arg SSH_KEY="$(cat ~/.ssh/id_rsa)" -t testfolder .
错误:
error TS5033: Could not write file '/home/myuser/app/spa-proxy/.build/src/types/index.js': EACCES: permission denied, open '/home/myuser/app/spa-proxy/.build/src/types/index.js'.
The command /bin/sh -c tsc returned a non-zero code: 2
错误发生在docker 运行命令运行 tsc。它正在尝试将构建文件写入创建的工作目录,但由于权限问题无法创建。
谁能帮我解决这个问题,因为我最终要尝试学习 docker。任何帮助将不胜感激。
注意:如果我们能写出更好的Dockerfile或docker-compose.yml.
,请指正默认情况下,复制的文件始终归 root 所有。将 --chown=
添加到您的 COPY 语句以使复制的文件归 'myuser' 所有,就像这样
COPY --chown=myuser:myuser package.json /home/myuser/app/spa-proxy
COPY --chown=myuser:myuser package-lock.json /home/myuser/app/spa-proxy
和
COPY --chown=myuser:myuser . /home/myuser/app/spa-proxy