无法通过docker-compose将音量添加到图像
我正在尝试将卷添加到mattermost / mattermost预览泊坞窗图像。 这个图片的Dockerfile(不受我控制)是:
# Copyright (c) 2016 Mattermost, Inc. All Rights Reserved. # See License.txt for license information. FROM mysql:5.7 # Install ca-certificates to support TLS of Mattermost v3.5 RUN apt-get update && apt-get install -y ca-certificates # # Configure SQL # ENV MYSQL_ROOT_PASSWORD=mostest ENV MYSQL_USER=mmuser ENV MYSQL_PASSWORD=mostest ENV MYSQL_DATABASE=mattermost_test # # Configure Mattermost # WORKDIR /mm # Copy over files ADD https://releases.mattermost.com/4.4.4/mattermost-team-4.4.4-linux-amd64.tar.gz . RUN tar -zxvf ./mattermost-team-4.4.4-linux-amd64.tar.gz ADD config_docker.json ./mattermost/config/config_docker.json ADD docker-entry.sh . RUN chmod +x ./docker-entry.sh ENTRYPOINT ./docker-entry.sh # Create default storage directory RUN mkdir ./mattermost-data VOLUME ./mattermost-data # Ports EXPOSE 8065
我想添加一个卷到这个图像和一个自定义的入口点,这样我可以添加一些testing数据到我的容器启动之前的mysql数据库。 我正在尝试使用docker-compose来执行此操作:
version: '3' services: mattermost: ports: - "8065:8065" image: mattermost/mattermost-preview volumes: - ./end_to_end/mattermost/mock-mount:/mm/mock-mount entrypoint: /mm/mock-mount/docker-entry.sh
但是我很遗憾不能启动,当我尝试运行docker-compose up
,出现错误
ERROR: for mattermost Cannot create container for service mattermost: invalid bind mount spec "39742853c03b3b2747f11c942a4a76e4cd138ad41d54f70f71d7aa9ccc36dcca:mattermost-data:rw": invalid volume specification: '39742853c03b3b2747f11c942a4a76e4cd138ad41d54f70f71d7aa9ccc36dcca:mattermost-data:rw': invalid mount config for type "volume": invalid mount path: 'mattermost-data' mount path must be absolute ERROR: Encountered errors while bringing up the project.
奇怪的是 – 如果我从我docker-compose.yml
文件中取出volumes
和entrypoint
部分,那么容器启动没有问题,即使在我看来,错误是与原始图像。 有没有办法做到我想在这里?
在Dockerfile中声明与docker-compose一起使用的卷时,不能使用相对path:
VOLUME ./mattermost-data
正如这里提到的 ,这个问题是相对于什么的? 这是相对于容器的一些workdir? 在构build图层时,是否与本地文件系统相关?
通常的做法是创build具有绝对path的卷,例如just /mattermost-data
(因此此挂载点将位于容器的根级别)。
在撰写文件中,源path的相对path是可以的,但是它是相对于撰写文件本身来解释的…所以你必须小心,不要认为它是相对于某个容器path的。 目标path仍然不允许相对path。
更多细节:
正如这里所报道的,Dockerfile中VOLUME的相对path不会导致Dockerfile中断,只是它们总是相对于/
而不关心任何中间WORKDIR或创build映像所涉及的临时层等等
基本上,如果你手动执行docker build
,创build一个相对的VOLUME将在顶层创build它。 对于docker-compose
,它根本不起作用,并抛出你所看到的错误。
您可能希望向该Dockerfile的作者提交错误报告,因为VOLUME ./mattermost-data
使用VOLUME ./mattermost-data
任何下游用户想要直接与docker-compose一起使用该映像。
我想在你的图片docker-remote.registry.kroger.com/mattermost/mattermost-preview
不存在的文件夹/mm/mock-mount
。
你能分享你的图片Dockerfile吗?
然后,尝试更改entrypoint
entrypoint: /bin/bash -c "/mm/mock-mount/docker-entry.sh"