Dockerfile构建报错:第18行ARG名称不能为空问题排查
报错根因
构建触发Dockerfile parse error line 18: ARG names can not be blank是语法不规范导致的:
Dockerfile的ARG指令定义带默认值的构建参数时,参数名、等号、默认值三者之间不能存在空格。你第18行写的ARG DEV = false在参数名DEV和等号之间加了空格,Docker解析器会将空格后的片段识别为新的ARG参数名,空值直接触发“参数名不能为空”的解析错误。
修复方案
仅需修改Dockerfile第18行的ARG定义,删除等号两侧的空格即可,正确写法:
ARG DEV=false
你的其余逻辑:包括docker-compose.yml中重写DEV参数为true的配置、RUN块中按DEV值判断是否安装开发依赖的shell逻辑、目录挂载和启动命令配置均无问题,不需要调整。
修复后完全符合你的设计预期:
- 直接执行
docker build构建生产镜像时,DEV取默认值false,仅安装requirements.txt内的生产依赖 - 通过docker-compose构建启动服务时,会自动传入
DEV=true,额外安装requirements.dev.txt内的开发依赖
修复后完整Dockerfile参考
# Install Python 3.9 image FROM python:3.9-alpine3.13 # maintainer of the image LABEL maintainer="tenz8" # for faster response ENV PYTHONBUFFERED 1 COPY ./requirements.txt /tmp/requirements.txt COPY ./requirements.dev.txt /tmp/requirements.dev.txt COPY ./app /app WORKDIR /app EXPOSE 8000 # getting overrided in docker-compose.yml ARG DEV=false # && \ used to split lines for smaller image layer RUN python -m venv /py && \ /py/bin/pip install --upgrade pip && \ /py/bin/pip install -r /tmp/requirements.txt && \ # install dev dependencies only when DEV=true if [ $DEV = "true" ]; \ then /py/bin/pip install -r /tmp/requirements.dev.txt ; \ fi && \ rm -rf /tmp && \ adduser \ --disabled-password \ --no-create-home \ django-user ENV PATH="/py/bin:$PATH" USER django-user
内容的提问来源于stack exchange,提问作者Azpect
相关产品推荐
相关产品推荐

