首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >docker-compose build和docker build提供不同的结果

docker-compose build和docker build提供不同的结果
EN

Stack Overflow用户
提问于 2021-07-10 15:57:23
回答 1查看 74关注 0票数 0

我已经创建了一个简单的Dockerfile来安装apache和PHP,然后从composer.json安装包。

代码语言:javascript
复制
FROM php:7-apache

WORKDIR /var/www/html

COPY ./src/html/ .
COPY composer.json .

RUN apt-get update
RUN apt-get install -y unzip

# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

RUN composer update

当我先运行docker build -t my-web-server .再运行docker run -p 8080:80 my-web-server时,一切都运行正常,包也安装好了。

但是当我使用docker-compose文件时:

代码语言:javascript
复制
version: "3.9"
services:
  ecp:
    build: .
    ports:
      - "8080:80"
    volumes:
      - ./src:/var/www

然后执行docker-compose build,然后执行docker-compose up,包不会安装,我只是将index.php带到容器中

我当前的文件结构:

代码语言:javascript
复制
src
 |-- html
     |-- index.php
composer.json
docker-compose.yaml
Dockerfile

docker-compose构建映像时,所有控制台输出都与docker build相同

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-10 16:41:02

您的两种方法并不完全相同。您正在docker编写中使用卷,而不是在docker调用中。你的问题就出在这里。

更具体地说,请注意,在docker compose中,您正在将主机的./src挂载到容器的./var/www中-这不会给您提供正确的结构,因为您“隐藏”了包含您的composer.json (在构建时复制到容器中)的容器文件夹。

为了避免这种混乱,我建议,如果您想使用compose挂载一个卷(这对于开发来说是一个好主意),那么您的docker-compose.yml文件应该挂载与Dockerfile中的COPY命令完全相同的卷。例如:

代码语言:javascript
复制
volumes:
  - ./src/html:/var/www/html
  - ./composer.json:/var/www/html/composer.json

或者,从docker-compose.yml中删除volumes指令。

请注意,将文件(在本例中为composer.json)复制到容器中的文件夹中,同时将相同的文件夹原样复制到容器中,这可能会导致其他问题和混乱。最好让容器上的结构尽可能地模仿主机上的结构。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68325859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档