docker中创build的文件在主机上写保护

我使用docker容器的轨道和ember.I从我的地方到容器安装源。 我在本地所做的所有更改都反映在容器中。

现在我想使用generators来创build文件。 这些文件被创build,但是它们在我的机器上被写保护。

当我尝试执行docker-compose run frontend bash ,我得到一个root@061e4159d4ef:/frontend#超级用户提示符访问容器内部。 当我处于这种模式时,我可以创build文件。 这些文件在我的主机中被写保护。

我也尝试了docker-compose run --user "$(id -u):$(id -g)" frontend bash ,我得到一个I have no name!@31bea5ae977c:/frontend$ ,我无法创build任何文件在这种模式下。 以下是我得到的错误信息。

 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,则必须创build一个新的。 要做到这一点,你必须创build一个Dockerfile,并把这样的东西:

 FROM your_image_name RUN useradd -ms /bin/bash newuser 

关于Dockerfiles的更多信息可以在这里find,也可以通过googlin来find。