在 OpenShift/Minishift 中部署 docker 图像时出现权限问题
Permission issues when deploying docker image in OpenShift/Minishift
本题涉及本地版本的OpenShift,Minishift。我运行正在使用 MacOS。
我正在尝试从 docker 中心部署一个名为 Mountebank 的应用程序,这是来源:
https://hub.docker.com/r/andyrbell/mountebank/
DockerFile 如下:
FROM alpine:3.6
EXPOSE 2525
CMD ["mb"]
ENV NODE_VERSION=6.10.3-r1
RUN apk update \
&& apk add --no-cache nodejs=${NODE_VERSION} \
&& apk add --no-cache nodejs-npm=${NODE_VERSION}
ENV MOUNTEBANK_VERSION=1.13.0
RUN npm install -g mountebank@${MOUNTEBANK_VERSION} --production \
&& npm cache clean \
&& rm -rf /tmp/npm*
我可以 运行 在 MacOS 本地容器内的 Mountebank 镜像。
当我在 Minishift 中安装镜像并尝试启动 pod 时,出现以下错误:
/usr/lib/node_modules/mountebank/node_modules/q/q.js:155
throw e;
^
Error: EACCES: permission denied, open 'mb.pid'
at Error (native)
at Object.fs.openSync (fs.js:641:18)
at Object.fs.writeFileSync (fs.js:1347:33)
at /usr/lib/node_modules/mountebank/bin/mb:176:16
at _fulfilled (/usr/lib/node_modules/mountebank/node_modules/q/q.js:854:54)
at self.promiseDispatch.done (/usr/lib/node_modules/mountebank/node_modules/q/q.js:883:30)
at Promise.promise.promiseDispatch (/usr/lib/node_modules/mountebank/node_modules/q/q.js:816:13)
at /usr/lib/node_modules/mountebank/node_modules/q/q.js:624:44
at runSingle (/usr/lib/node_modules/mountebank/node_modules/q/q.js:137:13)
at flush (/usr/lib/node_modules/mountebank/node_modules/q/q.js:125:13)
我假设这与我的 pod 在 Minishift 中 运行ning 的权限问题有关,但我不知道如何更改它们。
感谢任何帮助,
非常感谢
这可能是由于您尝试 运行 一张要求 运行 为 root
的图片。您的目标应该是构建您的图像,使其可以 运行 作为任何用户 ID。
首先,我建议尝试使用 OpenShift 提供的 nodejs S2I 构建器映像。
下一步是修改您的图像,以便 运行 可以按照以下指南作为任何用户 ID:
最后,如果由于某种原因您无法修复图像,您可以作为 OpenShift 集群管理员配置项目以允许您将 运行 图像作为 root
。
对于 Minishift,请参阅 anyuid
附加项的详细信息,这使得它更容易一些。
好的,这就是我解决问题的方法。我移动了要存储 mb.pid 和 mb.log 文件的位置。它们最初存储在根目录下,当图像托管在 Minishift 中时会导致问题:
FROM alpine:3.6
EXPOSE 2525
CMD mb --pidfile /tmp/mb.pid --logfile /tmp/mb.log
ENV NODE_VERSION=6.10.3-r1
RUN apk update \
&& apk add --no-cache nodejs=${NODE_VERSION} \
&& apk add --no-cache nodejs-npm=${NODE_VERSION}
ENV MOUNTEBANK_VERSION=1.13.0
RUN npm install -g mountebank@${MOUNTEBANK_VERSION} --production \
&& npm cache clean \
&& rm -rf /tmp/npm*
注意 --pidfile --logfile 将文件存储在 /tmp/
本题涉及本地版本的OpenShift,Minishift。我运行正在使用 MacOS。
我正在尝试从 docker 中心部署一个名为 Mountebank 的应用程序,这是来源:
https://hub.docker.com/r/andyrbell/mountebank/
DockerFile 如下:
FROM alpine:3.6
EXPOSE 2525
CMD ["mb"]
ENV NODE_VERSION=6.10.3-r1
RUN apk update \
&& apk add --no-cache nodejs=${NODE_VERSION} \
&& apk add --no-cache nodejs-npm=${NODE_VERSION}
ENV MOUNTEBANK_VERSION=1.13.0
RUN npm install -g mountebank@${MOUNTEBANK_VERSION} --production \
&& npm cache clean \
&& rm -rf /tmp/npm*
我可以 运行 在 MacOS 本地容器内的 Mountebank 镜像。
当我在 Minishift 中安装镜像并尝试启动 pod 时,出现以下错误:
/usr/lib/node_modules/mountebank/node_modules/q/q.js:155
throw e;
^
Error: EACCES: permission denied, open 'mb.pid'
at Error (native)
at Object.fs.openSync (fs.js:641:18)
at Object.fs.writeFileSync (fs.js:1347:33)
at /usr/lib/node_modules/mountebank/bin/mb:176:16
at _fulfilled (/usr/lib/node_modules/mountebank/node_modules/q/q.js:854:54)
at self.promiseDispatch.done (/usr/lib/node_modules/mountebank/node_modules/q/q.js:883:30)
at Promise.promise.promiseDispatch (/usr/lib/node_modules/mountebank/node_modules/q/q.js:816:13)
at /usr/lib/node_modules/mountebank/node_modules/q/q.js:624:44
at runSingle (/usr/lib/node_modules/mountebank/node_modules/q/q.js:137:13)
at flush (/usr/lib/node_modules/mountebank/node_modules/q/q.js:125:13)
我假设这与我的 pod 在 Minishift 中 运行ning 的权限问题有关,但我不知道如何更改它们。
感谢任何帮助,
非常感谢
这可能是由于您尝试 运行 一张要求 运行 为 root
的图片。您的目标应该是构建您的图像,使其可以 运行 作为任何用户 ID。
首先,我建议尝试使用 OpenShift 提供的 nodejs S2I 构建器映像。
下一步是修改您的图像,以便 运行 可以按照以下指南作为任何用户 ID:
最后,如果由于某种原因您无法修复图像,您可以作为 OpenShift 集群管理员配置项目以允许您将 运行 图像作为 root
。
对于 Minishift,请参阅 anyuid
附加项的详细信息,这使得它更容易一些。
好的,这就是我解决问题的方法。我移动了要存储 mb.pid 和 mb.log 文件的位置。它们最初存储在根目录下,当图像托管在 Minishift 中时会导致问题:
FROM alpine:3.6
EXPOSE 2525
CMD mb --pidfile /tmp/mb.pid --logfile /tmp/mb.log
ENV NODE_VERSION=6.10.3-r1
RUN apk update \
&& apk add --no-cache nodejs=${NODE_VERSION} \
&& apk add --no-cache nodejs-npm=${NODE_VERSION}
ENV MOUNTEBANK_VERSION=1.13.0
RUN npm install -g mountebank@${MOUNTEBANK_VERSION} --production \
&& npm cache clean \
&& rm -rf /tmp/npm*
注意 --pidfile --logfile 将文件存储在 /tmp/