Docker 卷挂载为空

时间:2021-04-06 15:32:00

标签: docker docker-compose

我正在制作一个图像来托管一个 PHP 应用程序。我正在使用 COPY 用应用程序文件填充 /var/www/html 并创建一个 VOLUME /var/www/html 以便能够在主机上安装目录并编辑诸如 config 之类的文件。

但是:

  1. 当我在 docker-compose.yml 上挂载卷时,目录是空的。

  2. 当我在 docker-compose.yml 上省略“volmue”条目并与容器 shell 连接时,目录 /var/www/html 被填满。

我已经阅读了大量的示例和文档,但说实话,我不知道哪里出了问题。

dockerfile:

FROM php:8.0-apache-buster
LABEL description="OCOMON 3.2 Frontend (noDB)"
RUN docker-php-ext-install pdo_mysql

WORKDIR /var/www/html/ocomon

COPY ./ocomon .

VOLUME /var/www/html/ocomon

docker-compose.yml:

version: '3.5'
services:
    ocomon:
        image: ocomon:3.2
        container_name: ocomon
        volumes:
            - ./volumes/ocomon/ocomon:/var/www/ocomon
        ports:
            - 4682:80

1 个答案:

答案 0 :(得分:1)

假设您的主机目录是 ${PWD}/www/html,那么您只需要在 volumes 中提供 docker-compose.yml 值,它应该是:

Dockerfile

FROM php:8.0-apache-buster
LABEL description="OCOMON 3.2 Frontend (noDB)"
RUN docker-php-ext-install pdo_mysql

WORKDIR /var/www/html/ocomon

COPY ./www/html/ocomon .

和: docker-compose.yml

version: '3.5'
services:
  ocomon:
    image: ocomon:3.2
    container_name: ocomon
    volumes:
    - ${PWD}/www/html:/var/www/html
    ports:
    - 4682:80

说明

  • Dockerfile VOLUMES 在镜像中创建一个卷。通过跟随 WORKDIR(如果路径不存在则始终创建),使用 VOLUME,您可以覆盖(或由 WORKDIR 创建)的任何内容。 注意这是在映像构建期间完成的。

  • Docker Compose volumes 将一个目录从主机挂载到镜像中。语法是volumes: - ${HOST_PATH}:${IMAGE_PATH}注意这是在图像运行期间完成的。