在kubernetes中运行nginx w/ npm app时获取权限错误

jm2pwxwz  于 2023-08-03  发布在  Kubernetes
关注(0)|答案(1)|浏览(100)

我正在尝试在Kubernetes中运行Redocly的developer portal。我需要使用nginix,因为开发者门户除了localhost之外不绑定任何东西,所以我使用nginx代理localhost。我一直在运行应用程序和nginx时遇到权限问题。我修复了nginx的权限(我认为),通过将此添加到dockerfile(def不好,但无法找出其他方法):

RUN chmod -R 777 /var
RUN chmod -R 777 /etc/nginx

字符串
我的Dockerfile看起来像这样:

FROM docker.abc.cc/node:16-alpine

# Define arguments and environment variables
ARG ARTIFACTORY_USERNAME
ARG ARTIFACTORY_PASSWORD
ENV ARTIFACTORY_USERNAME=$ARTIFACTORY_USERNAME
ENV ARTIFACTORY_PASSWORD=$ARTIFACTORY_PASSWORD

# Add curl and bash for debugging
RUN apk add --no-cache curl bash nginx

# Install npm-cli-login
RUN npm install -g npm-cli-login

WORKDIR /usr/src/app

# Log in to Artifactory
RUN \
    npm-cli-login \
    -u $ARTIFACTORY_USERNAME \
    -p $ARTIFACTORY_PASSWORD \
    -e $ARTIFACTORY_USERNAME@abc.com \
    -r https://artifactory.abc.cc/artifactory/api/npm/npm

# Copy package files and install dependencies
COPY --chown=node package*.json /usr/src/app/
RUN npm install --legacy-peer-deps

# Copy application files
COPY --chown=node . /usr/src/app/

# Add Nginx configuration file
COPY nginx.conf /etc/nginx/nginx.conf

RUN chmod -R 777 /usr/src
RUN chmod -R 777 /var
RUN chmod -R 777 /etc/nginx

# Start Nginx and the application
CMD ["sh", "-c", "nginx && npm start"]

# Expose the Nginx port
EXPOSE 3001


我的部署的相关部分看起来像这样:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: caas-dev-portal
  namespace: internal-tools
spec:
  replicas: 2
  revisionHistoryLimit: 3
    spec:
      containers:
      - env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        envFrom:
        - configMapRef:
            name: caas-dev-portal
        - configMapRef:
            name: abc-k8s-cluster-info
        - secretRef:
            name: apm-settings
        image: docker.abc.cc/caas-portal:v1test
        imagePullPolicy: Always
        lifecycle:
          preStop:
            exec:
              command:
              - /bin/sleep
              - "30"
        name: web
        ports:
        - containerPort: 3001
          name: http-api
        - containerPort: 9999
          name: http-management
        resources:
          limits:
            cpu: 1500m
            ephemeral-storage: 1Gi
            memory: 1024Mi
          requests:
            cpu: 100m
            ephemeral-storage: 10Mi
            memory: 128Mi
        startupProbe:
          failureThreshold: 45
          httpGet:
            path: /health
            port: http-api
          periodSeconds: 4
      imagePullSecrets:
      - name: artifactory-docker-registry
      restartPolicy: Always
      serviceAccountName: caas-dev-portal
      terminationGracePeriodSeconds: 40


然后我在应用程序日志中看到此错误:

/usr/src/app/node_modules/yoga-layout-prebuilt/yoga-layout/build/Release/nbind.js:53
        throw ex;
        ^

Error: EPERM: operation not permitted, copyfile '/usr/src/app/package.json' -> '/usr/src/app/node_modules/@redocly/developer-portal/dist/engine/package.json'
    at copyFileSync (node:fs:2847:3)
    at runCommand (/usr/src/app/node_modules/@redocly/developer-portal/dist/cli/run-command.js:1:356)
    at Object.handler (/usr/src/app/node_modules/@redocly/developer-portal/dist/cli.js:2:1376)
    at Object.runCommand (/usr/src/app/node_modules/@redocly/developer-portal/node_modules/yargs/build/index.cjs:446:48)
    at Object.parseArgs [as _parseArgs] (/usr/src/app/node_modules/@redocly/developer-portal/node_modules/yargs/build/index.cjs:2697:57)
    at Object.get [as argv] (/usr/src/app/node_modules/@redocly/developer-portal/node_modules/yargs/build/index.cjs:2651:25)
    at Object.<anonymous> (/usr/src/app/node_modules/@redocly/developer-portal/dist/cli.js:2:4118)
    at Module._compile (node:internal/modules/cjs/loader:1198:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1252:10)
    at Module.load (node:internal/modules/cjs/loader:1076:32) {
  errno: -1,
  syscall: 'copyfile',
  code: 'EPERM',
  path: '/usr/src/app/package.json',
  dest: '/usr/src/app/node_modules/@redocly/developer-portal/dist/engine/package.json'
}
npm notice
npm notice New major version of npm available! 8.19.4 -> 9.8.1
npm notice Changelog: <https://github.com/npm/cli/releases/tag/v9.8.1>
npm notice Run `npm install -g npm@9.8.1` to update!
npm notice


它看起来像应用程序没有权限完全运行,但我不太清楚如何给予它正确的权限。我甚至在运行CMD之前在Dockerfile中添加了RUN chmod -R 777 /usr/src,但仍然得到这个错误。
什么是最好的方法来解决我的权限问题,这样我就可以让nginx和应用程序运行?

mdfafbf1

mdfafbf11#

以下故障排除步骤将帮助您解决问题:
1.由于您使用的是旧版本的try clean cache with npm cache clean --force,请以admin的身份全局安装最新版本的npm:npm install -g npm@latest --force or npm install -g npm@9.8.1
2.尝试从项目文件夹中删除只读属性。
3.按照issue,你需要使用version属性指定Docker版本。通过在docker文件中添加以下代码:

- setup_remote_docker:
    version: 19.03.13

字符串
4.您正在使用RUN chmod -R 777,不建议使用它,因为它为所有者、组和其他人设置了读、写和执行权限,这意味着每个人都可以完全访问目录及其内容。

Try sudo chown $USER:$USER -R __YOUR_PROJECT__DIRECTORY__ 

Or sudo chmod -R 775 </img/folder and project/folder>


注意:如果您需要更改容器外部的文件或目录的权限,则需要使用sudo,如果您需要更改Docker容器内的文件或目录的权限,则应使用RUN命令。

相关问题