在 docker 中创建的文件在主机上被写保护
Files created inside docker are write protected on host
我正在为 rails 使用 docker 容器,并且 ember.I 正在将源代码从本地安装到容器。我在本地所做的所有更改都反映在容器中。
现在我想使用generators
创建文件。文件已创建,但它们在我的机器上被写保护。
当我尝试执行 docker-compose run frontend bash
时,我得到容器内部的 root@061e4159d4ef:/frontend#
超级用户提示访问权限。当我处于这种模式时,我可以创建文件。这些文件在我的主机中被写保护。
我也试过docker-compose run --user "$(id -u):$(id -g)" frontend bash
,我得到一个I have no name!@31bea5ae977c:/frontend$
,我无法在此模式下创建任何文件。以下是我收到的错误消息。
I have no name!@31bea5ae977c:/frontend$ ember g template about
/frontend/node_modules/ember-cli/node_modules/configstore/node_modules/mkdirp/index.js:90
throw err0;
^
Error: EACCES: permission denied, mkdir '/.config'
at Error (native)
at Object.fs.mkdirSync (fs.js:916:18)
at sync (/frontend/node_modules/ember-cli/node_modules/configstore/node_modules/mkdirp/index.js:71:13)
at Function.sync (/frontend/node_modules/ember-cli/node_modules/configstore/node_modules/mkdirp/index.js:77:24)
at Object.create.all.get (/frontend/node_modules/ember-cli/node_modules/configstore/index.js:39:13)
at Object.Configstore (/frontend/node_modules/ember-cli/node_modules/configstore/index.js:28:44)
at clientId (/frontend/node_modules/ember-cli/lib/cli/index.js:22:21)
at module.exports (/frontend/node_modules/ember-cli/lib/cli/index.js:65:19)
at /usr/local/lib/node_modules/ember-cli/bin/ember:26:3
at /usr/local/lib/node_modules/ember-cli/node_modules/resolve/lib/async.js:44:21
这是我的 Dockerfile
:
FROM node:6.2
ENV INSTALL_PATH /frontend
RUN mkdir -p $INSTALL_PATH
WORKDIR $INSTALL_PATH
# Copy package.json separately so it's recreated when package.json
# changes.
COPY package.json ./package.json
RUN npm install
COPY . $INSTALL_PATH
RUN npm install -g phantomjs bower ember-cli ;\
bower --allow-root install
EXPOSE 4200
EXPOSE 49152
CMD [ "ember", "server" ]
这是我的 docker-compose.yml
文件,请注意它不在当前目录中,而是在父目录中。
frontend:
build: "frontend/"
dockerfile: "Dockerfile"
environment:
- EMBER_ENV=development
ports:
- "4200:4200"
- "49152:49152"
volumes:
- ./frontend:/frontend
我想知道如何使用生成器?我刚开始学习docker。感谢任何帮助。
你得到 I have no name!
因为这个:$(id -u):$(id -g)
您主机中的用户 ID 和组未链接到您容器中的任何用户。
解决方案:
如果容器已经 运行 并且您由于某种原因无法停止它,则在容器 内执行 chown UID:GID -R /frontend
。否则,您可以在主机中执行 chown 命令,然后再次 运行 您的容器。 UID和GID必须属于容器内用户的节点
示例:chown 101:101 -R /frontend
其中 101 是 www-data 的 UID:GID。
如果您的容器中除了 root 之外没有其他用户,您将必须创建一个新用户。为此,您必须创建一个 Dockerfile 并放入如下内容:
FROM your_image_name
RUN useradd -ms /bin/bash newuser
可以找到有关 Dockerfile 的更多信息 here 或通过谷歌搜索。
我正在为 rails 使用 docker 容器,并且 ember.I 正在将源代码从本地安装到容器。我在本地所做的所有更改都反映在容器中。
现在我想使用generators
创建文件。文件已创建,但它们在我的机器上被写保护。
当我尝试执行 docker-compose run frontend bash
时,我得到容器内部的 root@061e4159d4ef:/frontend#
超级用户提示访问权限。当我处于这种模式时,我可以创建文件。这些文件在我的主机中被写保护。
我也试过docker-compose run --user "$(id -u):$(id -g)" frontend bash
,我得到一个I have no name!@31bea5ae977c:/frontend$
,我无法在此模式下创建任何文件。以下是我收到的错误消息。
I have no name!@31bea5ae977c:/frontend$ ember g template about
/frontend/node_modules/ember-cli/node_modules/configstore/node_modules/mkdirp/index.js:90
throw err0;
^
Error: EACCES: permission denied, mkdir '/.config'
at Error (native)
at Object.fs.mkdirSync (fs.js:916:18)
at sync (/frontend/node_modules/ember-cli/node_modules/configstore/node_modules/mkdirp/index.js:71:13)
at Function.sync (/frontend/node_modules/ember-cli/node_modules/configstore/node_modules/mkdirp/index.js:77:24)
at Object.create.all.get (/frontend/node_modules/ember-cli/node_modules/configstore/index.js:39:13)
at Object.Configstore (/frontend/node_modules/ember-cli/node_modules/configstore/index.js:28:44)
at clientId (/frontend/node_modules/ember-cli/lib/cli/index.js:22:21)
at module.exports (/frontend/node_modules/ember-cli/lib/cli/index.js:65:19)
at /usr/local/lib/node_modules/ember-cli/bin/ember:26:3
at /usr/local/lib/node_modules/ember-cli/node_modules/resolve/lib/async.js:44:21
这是我的 Dockerfile
:
FROM node:6.2
ENV INSTALL_PATH /frontend
RUN mkdir -p $INSTALL_PATH
WORKDIR $INSTALL_PATH
# Copy package.json separately so it's recreated when package.json
# changes.
COPY package.json ./package.json
RUN npm install
COPY . $INSTALL_PATH
RUN npm install -g phantomjs bower ember-cli ;\
bower --allow-root install
EXPOSE 4200
EXPOSE 49152
CMD [ "ember", "server" ]
这是我的 docker-compose.yml
文件,请注意它不在当前目录中,而是在父目录中。
frontend:
build: "frontend/"
dockerfile: "Dockerfile"
environment:
- EMBER_ENV=development
ports:
- "4200:4200"
- "49152:49152"
volumes:
- ./frontend:/frontend
我想知道如何使用生成器?我刚开始学习docker。感谢任何帮助。
你得到 I have no name!
因为这个:$(id -u):$(id -g)
您主机中的用户 ID 和组未链接到您容器中的任何用户。
解决方案:
如果容器已经 运行 并且您由于某种原因无法停止它,则在容器 内执行 chown UID:GID -R /frontend
。否则,您可以在主机中执行 chown 命令,然后再次 运行 您的容器。 UID和GID必须属于容器内用户的节点
示例:chown 101:101 -R /frontend
其中 101 是 www-data 的 UID:GID。
如果您的容器中除了 root 之外没有其他用户,您将必须创建一个新用户。为此,您必须创建一个 Dockerfile 并放入如下内容:
FROM your_image_name
RUN useradd -ms /bin/bash newuser
可以找到有关 Dockerfile 的更多信息 here 或通过谷歌搜索。