首页 > 解决方案 > Dockerfile 正确构建但 ADD 失败

问题描述

我对 Docker 很陌生,我正在尝试制作一个简单的 Dockerfile,它将高山图像与 python 图像结合起来。

这是 Dockerfile 的样子:

FROM alpine

RUN apk update &&\
    apk add -q --progress \
        bash \
        bats \
        curl \
        figlet \
        findutils \
        git \
        make \
        mc \
        nodejs \
        openssh \
        sed \
        wget \
        vim

ADD ./src/ /home/src/

WORKDIR /home/src/

FROM python:3.7.4-slim

运行时:

docker build -t alp-py .

图像正常构建。

当我跑

docker run -it alp-py bash

我可以访问 bash,但是当我 cd 到 /home/ 和 ls 时,它显示一个空目录:

root@5fb77bbc81a1:/# cd home
root@5fb77bbc81a1:/home# ls
root@5fb77bbc81a1:/home#

我已经尝试将 ADD 更改为 COPY 并尝试:

CPOY . /home/src/

但没有任何效果。

我究竟做错了什么?我错过了什么吗?谢谢!

标签: dockerdockerfile

解决方案


没有“组合 2 张图像”之类的东西。您应该将图像视为不同的虚拟机(仅用于理解概念 - 因为它们不止于此)。你不能把它们结合起来。

在您的示例中,您可以直接从 python 映像开始并在其上安装所需的工具:

FROM python:3.7.4-slim

RUN apt update &&\
    apt-get install -y \
        bash \
        bats \
        curl \
        figlet \
        findutils \
        git \
        make \
        mc \
        nodejs \
        openssh \
        sed \
        wget \
        vim

ADD ./src/ /home/src/

WORKDIR /home/src/

我没有测试是否所有软件包都可用,因此您可能需要进行一些研究以获取所有软件包,以防万一出现错误。

当您在 Dockerfile 中使用 2 个 FROM 语句时,您正在创建一个多阶段构建。如果您想创建一个不包含源代码但仅包含产品二进制文件的最终图像,这将非常有用(第一阶段构建源代码,第二阶段仅从第一个阶段复制二进制文件)。


推荐阅读