我正在尝试向mattermost/mattermost-preview泊坞窗图片添加一个卷。此图像的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
我想在此图像和自定义入口点添加一个卷,以便在容器启动之前将一些测试数据添加到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.
奇怪的是 - 如果我从volumes
文件中取出entrypoint
和docker-compose.yml
部分,那么容器启动没问题,即使在我看来,错误与原始图像有关。有没有办法在这里做我想要的?
答案 0 :(得分:1)
在将Dockerfile中的卷声明为与docker-compose一起使用时,不能使用相对路径:
VOLUME ./mattermost-data
作为mentioned here,问题是相对于什么?它是否相对于容器的某个workdir?在构建图层时,它是否与本地文件系统相关?
通常的做法是使用绝对路径创建卷,例如/mattermost-data
(因此此挂载点将位于容器的根级别)。
在撰写文件中,源路径的相对路径是正常的,但它是相对于解释为撰写文件本身 ...所以你必须要小心,不要认为它是相对于某个容器路径。目标路径仍然不允许相对路径。
更多详情:
正如报道here一样,Dockerfile中VOLUME的相对路径不会导致Dockerfile必然中断,只是它们总是被相对于/
和不要关心任何中间WORKDIR或创建图像所涉及的临时层等。
基本上,如果手动执行docker build
,创建相对VOLUME将在顶层创建它。但是对于docker-compose
,它根本不起作用,并抛出你看到的错误。
您可能希望向该Dockerfile的作者提交错误报告,因为VOLUME ./mattermost-data
使用任何想要直接使用docker-compose使用该图像的下游人员。
答案 1 :(得分:0)
我认为在您的图片中docker-remote.registry.kroger.com/mattermost/mattermost-preview
不存在文件夹/mm/mock-mount
。
你可以分享你的图像Dockerfile吗?
然后,尝试将entrypoint
更改为
entrypoint: /bin/bash -c "/mm/mock-mount/docker-entry.sh"