首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >全局ARG变量在多阶段构建后被更改。

全局ARG变量在多阶段构建后被更改。
EN

Stack Overflow用户
提问于 2019-07-04 02:20:41
回答 1查看 275关注 0票数 0

FROMRUN等指令中使用全局ARG变量

例如,我希望在FROM nvidia/cuda:${CUDA_VERSION}-devel-ubuntu${UBUNTU_VERSION}中使用FROM nvidia/cuda:${CUDA_VERSION}-devel-ubuntu${UBUNTU_VERSION} ARG变量,在第二个构建阶段使用libcudnn7=${CUDNN_VERSION}-1+cuda${CUDA_VERSION}

但是全局ARG变量${CUDA_VERSION}在通过FROM nvidia/cuda:${CUDA_VERSION}-devel-ubuntu${UBUNTU_VERSION} 9.0后被更改为9.0.176。

在Ubuntu 18.04,Docker-CE 18.09.04

我被试过很多事

  1. 在构建阶段更改ARG可变线路位置
  2. 从原始${CUDA_VERSION}变量复制其他ARG变量
  3. 在第一个构建阶段为环境变量制作.profile。在第二阶段,从第一阶段复制.profile文件并使用source命令应用它。
  4. 使用ENV变量(但ENV变量在进入其他构建阶段时消失)

示例dockerfile和生成dockerfile的结果如下

Dockerfile

代码语言:javascript
复制
ARG handler_file=handler.py
ARG handler_name=Handler
ARG HANDLER_DIR=/handler
ARG HANDLER_FILE=${HANDLER_DIR}/${handler_file}
ARG HANDLER_NAME=${handler_name}

# Global arguments for Nvidia-docker
ARG CUDA_VERSION=9.0
ARG CUDNN_VERSION=7.4.1.5
ARG UBUNTU_VERSION=16.04

# == MutiStage Build ==
# 1-Stage
FROM python:3.7-alpine

ARG HANDLER_DIR
ARG HANDLER_FILE
ARG HANDLER_NAME
ARG handler_file
ARG handler_name

ARG CUDA_VERSION
RUN echo "${CUDA_VERSION}"

RUN mkdir -p ${HANDLER_DIR}
WORKDIR ${HANDLER_DIR}
COPY . .
RUN touch ${HANDLER_DIR}/__init__.py

# 2-Stage
FROM nvidia/cuda:${CUDA_VERSION}-devel-ubuntu${UBUNTU_VERSION}

# For Nvidia-Docker
ARG CUDA_VERSION
ARG CUDNN_VERSION

RUN echo "${CUDA_VERSION}"

# Copy directory from 1-stage
ARG HANDLER_DIR
RUN mkdir -p ${HANDLER_DIR}
WORKDIR ${HANDLER_DIR}
COPY --from=0 ${HANDLER_DIR} .

RUN echo "/usr/local/cuda-${CUDA_VERSION}/extras/CUPTI/lib64" > /etc/ld.so.conf.d/cupti.conf

RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    wget \
    tar \
    libgomp1 \
    libcudnn7=${CUDNN_VERSION}-1+cuda${CUDA_VERSION} \
    python \
        python-dev \
        python-numpy \
        python-pip \
        python-setuptools \
        python3 \
        python3-dev \
        python3-numpy \
    python3-pip \
        python3-setuptools \
        python3-tk \
        libgtk2.0-dev \
    ${ADDITIONAL_PACKAGE} \
    && rm -rf /var/lib/apt/lists/*

ENV LD_LIBRARY_PATH /usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH

RUN pip3 --no-cache-dir install --upgrade \
    pip setuptools

RUN pip3 install --upgrdae pip && \
    pip3 install -r requirements.txt

构建消息

代码语言:javascript
复制
...

Step 9/33 : FROM python:3.7-alpine
 ---> 2caaa0e9feab

...

Step 16/33 : RUN echo "${CUDA_VERSION}"
 ---> Running in d057b0fd57a7
9.0

...

Step 21/33 : FROM nvidia/cuda:${CUDA_VERSION}-devel-ubuntu${UBUNTU_VERSION}
 ---> 2f9810b1b916

...

Step 24/33 : RUN echo "${CUDA_VERSION}"
 ---> Running in dc676c2a2992
9.0.176

...

Step 30/33 : RUN apt-get update && apt-get install -y --no-install-recommends   build-essential     wget    tar     libgomp1    libcudnn7=${CUDNN_VERSION}-1+cuda${CUDA_VERSION}    python         python-dev         python-numpy         python-pip         python-setuptools         python3         python3-dev         python3-numpy   python3-pip         python3-setuptools         python3-tk         libgtk2.0-dev     ${ADDITIONAL_PACKAGE}     && rm -rf /var/lib/apt/lists/*
 ---> Running in 8518fb8d755c

...

E: Version '7.4.1.5-1+cuda9.0.176' for 'libcudnn7' was not found
The command '/bin/sh -c apt-get update && apt-get install -y --no-install-recommends    build-essential     wget    tar     libgomp1    libcudnn7=${CUDNN_VERSION}-1+cuda${CUDA_VERSION}    python         python-dev         python-numpy         python-pip         python-setuptools         python3         python3-dev         python3-numpy   python3-pip         python3-setuptools         python3-tk         libgtk2.0-dev     ${ADDITIONAL_PACKAGE}     && rm -rf /var/lib/apt/lists/*' returned a non-zero code: 100

预期的结果是成功构建docker文件。

但是ARG变量的更改会导致以下错误E: Version '7.4.1.5-1+cuda9.0.176' for 'libcudnn7' was not found

EN

回答 1

Stack Overflow用户

发布于 2019-07-04 02:24:29

我解决了我的问题如下

我在https://github.com/docker/for-linux/issues/713上发了个帖子

代码语言:javascript
复制
# Global arguments for Nvidia-docker
ARG CUDA_VERSION=9.0
ARG CUDNN_VERSION=7.4.1.5
ARG UBUNTU_VERSION=16.04
ARG BACKUP=${CUDA_VERSION}

...

RUN echo "/usr/local/cuda-${BACKUP}/extras/CUPTI/lib64" > /etc/ld.so.conf.d/cupti.conf

RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    wget \
    tar \
    libgomp1 \
    libcudnn7=${CUDNN_VERSION}-1+cuda${BACKUP} \
    python \
        python-dev \
        python-numpy \
        python-pip \
        python-setuptools \
        python3 \
        python3-dev \
        python3-numpy \
    python3-pip \
        python3-setuptools \
        python3-tk \
        libgtk2.0-dev \
    ${ADDITIONAL_PACKAGE} \
    && rm -rf /var/lib/apt/lists/*

...

Dockerfile

代码语言:javascript
复制
# Arguments for Nvidia-Docker
# all combination set in CUDA, cuDNN, Ubuntu is not Incompatible please check REFERENCE OF NVIDIA-DOCKER
# REFERENCE OF NVIDIA-DOCKER 
# https://hub.docker.com/r/nvidia/cuda/

ARG handler_file=handler.py
ARG handler_name=Handler
ARG HANDLER_DIR=/handler
ARG HANDLER_FILE=${HANDLER_DIR}/${handler_file}
ARG HANDLER_NAME=${handler_name}

# Global arguments for Nvidia-docker
ARG CUDA_VERSION=9.0
ARG CUDNN_VERSION=7.4.1.5
ARG UBUNTU_VERSION=16.04
ARG BACKUP=${CUDA_VERSION}

# == MutiStage Build ==
# 1-Stage
# Get watcher - if watcher is uploaded on github, remove this line.
FROM python:3.7-alpine

ARG HANDLER_DIR
ARG HANDLER_FILE
ARG HANDLER_NAME
ARG handler_file
ARG handler_name

ARG BACKUP
ARG CUDA_VERSION
RUN echo "${CUDA_VERSION}"
RUN echo "${BACKUP}"

RUN mkdir -p ${HANDLER_DIR}
WORKDIR ${HANDLER_DIR}
COPY . .
RUN touch ${HANDLER_DIR}/__init__.py

# 2-Stage
FROM nvidia/cuda:${CUDA_VERSION}-devel-ubuntu${UBUNTU_VERSION}

ARG BACKUP
# For Nvidia-Docker
ARG CUDA_VERSION
ARG CUDNN_VERSION

RUN echo "${CUDA_VERSION}"
RUN echo "${BACKUP}"

# Copy directory from 0-stage
ARG HANDLER_DIR
RUN mkdir -p ${HANDLER_DIR}
WORKDIR ${HANDLER_DIR}
COPY --from=0 ${HANDLER_DIR} .

RUN echo "/usr/local/cuda-${BACKUP}/extras/CUPTI/lib64" > /etc/ld.so.conf.d/cupti.conf

RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    wget \
    tar \
    libgomp1 \
    libcudnn7=${CUDNN_VERSION}-1+cuda${BACKUP} \
    python \
        python-dev \
        python-numpy \
        python-pip \
        python-setuptools \
        python3 \
        python3-dev \
        python3-numpy \
    python3-pip \
        python3-setuptools \
        python3-tk \
        libgtk2.0-dev \
    ${ADDITIONAL_PACKAGE} \
    && rm -rf /var/lib/apt/lists/*

ENV LD_LIBRARY_PATH /usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH

RUN pip3 --no-cache-dir install --upgrade \
    pip setuptools

RUN pip3 install --upgrdae pip && \
    pip3 install -r requirements.txt
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56879869

复制
相关文章

相似问题

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