You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.dockerignore在docker-compose子目录构建时失效问题排查

问题:.dockerignore配置忽略index.js后,容器内仍存在该文件

项目目录结构

market/
    |--.dockerignore
    |--Dockerfile
    |--index.js
    |--package.json
    |--package-lock.json
    |--market
docker-compose.yml

相关配置文件内容

docker-compose.yml

version: "3.8"
services:
  market:
    build:
      context: ./
      dockerfile: ./market/Dockerfile

Dockerfile

FROM node:20

WORKDIR /usr/src/app

COPY /market/package*.json ./

RUN npm install

COPY /market/. ./
CMD ["ls"]

.dockerignore

index.js

容器执行结果

启动容器后执行ls命令,输出如下:

dockertest-market-1  | Dockerfile
dockertest-market-1  | index.js
dockertest-market-1  | node_modules
dockertest-market-1  | package-lock.json
dockertest-market-1  | package.json

问题原因

核心问题是.dockerignore的位置不对:

  • 你在docker-compose.yml里指定的构建上下文是项目根目录./(也就是包含market/文件夹和docker-compose.yml的那个目录)。
  • Docker在构建时只会读取构建上下文根目录下的.dockerignore文件,不会自动去子目录里查找。你把.dockerignore放在market/文件夹里,等于这个规则根本没被Docker读取到,自然不会生效。

解决办法

有两种简单的修复方式:

  1. 移动.dockerignore位置:把market/里的.dockerignore文件移到项目根目录(和docker-compose.yml同目录),内容保持不变。这样Docker构建时就能识别到忽略规则,不会把market/index.js复制进容器。
  2. 调整构建上下文:修改docker-compose.yml的构建上下文为./market,同时简化Dockerfile里的路径:
    • 修改后的docker-compose.yml:
      version: "3.8"
      services:
        market:
          build:
            context: ./market
            dockerfile: Dockerfile
      
    • 修改后的Dockerfile:
      FROM node:20
      
      WORKDIR /usr/src/app
      
      COPY package*.json ./
      
      RUN npm install
      
      COPY . ./
      CMD ["ls"]
      
    这样构建上下文变成market/目录,里面的.dockerignore就能正常生效,index.js会被忽略。

内容的提问来源于stack exchange,提问作者TungTung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 12:15:03