我正在制作一个图像来托管一个 PHP 应用程序。我正在使用 COPY
用应用程序文件填充 /var/www/html
并创建一个 VOLUME /var/www/html
以便能够在主机上安装目录并编辑诸如 config 之类的文件。
但是:
当我在 docker-compose.yml 上挂载卷时,目录是空的。
当我在 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
答案 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}
。 注意这是在图像运行期间完成的。