我正在尝试在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和应用程序运行?
1条答案
按热度按时间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文件中添加以下代码:
字符串
4.您正在使用
RUN chmod -R 777
,不建议使用它,因为它为所有者、组和其他人设置了读、写和执行权限,这意味着每个人都可以完全访问目录及其内容。型
注意:如果您需要更改容器外部的文件或目录的权限,则需要使用sudo,如果您需要更改Docker容器内的文件或目录的权限,则应使用RUN命令。