当前位置: 首页 > 知识库问答 >
问题:

docker内部创建的文件在主机上受写保护

龙佐
2023-03-14

我正在为rails和ember使用docker容器。我正在将源代码从本地安装到容器。我在local上所做的所有更改都反映在容器中。

现在我想使用生成器来创建文件。文件已创建,但在我的机器上受写保护。

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

我还尝试了docker compose run——用户“$(id-u):$(id-g)“frontend bash”,我得到了一个我没有名字的问题@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

我想知道,我如何使用generateors?我刚开始学习docker。感谢您的帮助。

共有1个答案

解翰采
2023-03-14

你得到了我没有名字!因此:$(id-u):$(id-g)主机中的用户id和组没有链接到您容器中的任何用户。

解决方案:

如果容器已经在运行,并且由于某种原因无法停止,请在容器内执行。否则,您可以在主机中执行chown命令,然后再次运行容器。UID和GID必须属于容器内用户的节点

示例:chown 101:101-R /frontend与101是www数据的UID: GID。

如果您的容器中没有其他用户exept root,则必须创建一个新的用户exept root。为此,您必须创建Dockerfile并放置如下内容:

FROM your_image_name
RUN useradd -ms /bin/bash newuser

关于Dockerfile的更多信息可以在这里找到,或者只是通过谷歌搜索。

 类似资料:
  • 使用docker container inspect xxx,我可以找到装载信息。 在docker exec-it xxx bash之后,就会出现部署/应用/日志目录,其中的文件也会更新 但是,主机上没有创建主/应用程序日志目录,我仔细检查了源代码是否正确,例如部署/应用程序/日志 这个问题与我的情况非常接近,因为讨论使用目录装载的答案可以解决这个问题,这意味着不是我的问题。Docker bind

  • 问题内容: 感谢您收看这个问题。 所以我的问题与如何在docker-compose up指令上运行脚本的最佳实践有关。 目前,我正在主机和容器之间共享一个卷,以使脚本更改对主机和容器均可见。与监视脚本轮询配置文件中的更改类似。 该脚本必须根据预定义规则对主机进行更改。 所以我的问题是: 我如何才能在docker-compose up指令上甚至从服务的dockerfile上启动此脚本,以便每当容器启

  • 问题内容: 我在Linux机器(RHEL 5.4)上使用Java 1.4.2。 我们的应用程序使用log4j进行日志记录。我希望某些附加程序可以创建文件名中包含主机名的文件。不应对主机名进行硬编码,而应使用类似于此处的系统属性(请参见$ {log4j.minutes})。 所以问题是系统属性中是否有主机名。根据此处,没有默认的主机名属性。 这意味着我需要从命令行(-D标志)的代码中添加主机名作为系

  • 我们想在Pepper机器人上拍摄一张照片并保存它(不知何故)->第一个想法是压缩到.jpg文件。 TakePicture操作来自QISDK教程,然后我们如下所示创建文件:

  • 问题内容: 我是Docker的新手。 我运行了一个10节点的图像,并在运行的容器中克隆了一个存储库,运行了使用文件监视程序启动服务器的应用程序。我需要访问容器内的代码库,并在Windows主机上运行的IDE中打开它。如果完成了,那么我还希望当我在IDE中更改文件时,这些更改会在容器中引起文件监视程序。 任何帮助表示赞赏。谢谢, 问题答案: 您正在寻找的概念称为卷。您需要启动一个容器并在其中安装主机

  • 问题内容: 除了使用环境变量之外,还有什么方法可以从在该主机上运行的容器内部获取Docker主机的主机名? 我知道我可以在创建容器时将主机名作为环境变量传递给容器。 我想知道如何在运行时查找它。 有没有办法在Docker主机中运行的容器获取“ foo.example.com”? 编辑以添加用例: 容器将创建SRV记录以用于表单的服务发现 其中20003是docker主机上动态分配的端口,用于服务监