【问题标题】:Cannot rebuild a service after docker-compose with mongo volume is built构建带有 mongo 卷的 docker-compose 后无法重建服务
【发布时间】:2020-03-30 09:25:41
【问题描述】:

我有一个像这样的 docker-compose 文件:

version: "3.4"

services:
  mongo:
    image: mongo
    restart: always
    container_name: us_mongodb
    environment:
     ...
    volumes:
      - ./mongo-dev-volume:/data/db


  mongo-express:
  ...


  example-app:
    build:
      context: ../../
      dockerfile: "./example-app/Dockerfile"
      args:
        - PORT=4200
    container_name: us_example-app_builder_and_server
    ports:
      - 4200:4200 

volumes:
  mongo-dev-volume:

(示例应用程序 dockerfile 只是一个简单的静态文件服务器,它将文件复制到自身。)

如果我运行 docker-compose up 一切都很好。

我想重建上述示例应用程序,所以我运行这个命令:

docker-compose up -d --force-recreate --no-deps --build example-app

为此,我收到以下错误消息:

forest@forest:~/xxxxxx/xxxxxx/Docker/prod-nginx$ docker-compose up -d --force-recreate --no-deps --build example-app
Building example-app
Traceback (most recent call last):
  File "bin/docker-compose", line 6, in <module>
...
  [Previous line repeated 1 more time]
  File "site-packages/docker/utils/build.py", line 184, in rec_walk
PermissionError: [Errno 13] Permission denied: '/xxxxxx/xxxxxx/Docker/prod-nginx/mongo-dev-volume/journal'

这里有什么问题?

我已经发现/尝试过的事情: 1.) 上述服务与 mongodb 卷没有任何关系。但是如果我删除了所说的 mongo-dev-volume,那么命令可以运行。之后,如果单个docker-compose up 创建了上述文件夹,问题仍然出现。但这不是在每次重启时删除数据库的解决方案......

2.) 我仍然可以毫无问题地执行docker-compose downdocker-compose up(但正如我所说,我需要重建上述示例应用程序...)

3.) 我尝试添加一个 .dockerignore,就像在其他一些线程中看到的那样:

#.dockerignore
**/mongo-dev-volume

但它似乎没有任何效果。 (就在 docker-compose.yml 旁边)

4.) 我怀疑某些内容与权限有关。但是我不创建卷(只绑定名称),docker创建它:

forest@forest:~/xxxxxx/xxxxxx/Docker/prod-nginx$ ls -lsh
total 32K

4,0K -rw-rw-r-- 1 forest forest 3,8K dec    5 10:31 docker-compose.yml
4,0K drwxrwxr-x 2 forest forest 4,0K júl    1 12:25 example-app
4,0K drwxrwxr-x 4    999 root   4,0K dec    5 13:12 mongo-dev-volume

【问题讨论】:

    标签: mongodb docker permissions docker-compose


    【解决方案1】:

    我的一种解决方法是删除卷绑定,并让 Docker 在工作目录之外创建一个单独的(已处理的)卷。

    不是这个

      ./mongo-dev-volume:/data/db
    

    我输入了这个:

      mongo-dev-volume:/data/db
    

    这样,我仍然可以访问该文件,据我所知,最好让操作系统和 Docker 处理这个问题,而不是在项目中创建一个 filesys 链接。

    【讨论】:

    • 这把它放在哪里了?
    • 取决于系统。对于 linux,它可能是 /var/lib/docker/volumes/xyz
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 2020-02-23
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    相关资源
    最近更新 更多