Docker:防止多个docker镜像覆盖/ usr / local / bin?

时间:2018-02-06 23:10:58

标签: docker

Dockerfile One

FROM ubuntu
FROM docker

CMD ["ls", "/usr/local/bin"]

然后,

docker build -t test .
docker run test

输出:

docker
docker-containerd
docker-containerd-ctr
docker-containerd-shim
docker-entrypoint.sh
docker-init
docker-proxy
docker-runc
dockerd
modprobe

添加了如下的python图像

Dockerfile Two

FROM ubuntu
FROM docker
FROM python:2.7-slim

CMD ["ls", "/usr/local/bin"]

然后,

docker build -t test .
docker run test

输出

2to3
easy_install
easy_install-2.7
idle
pip
pip2
pip2.7
pydoc
python
python-config
python2
python2-config
python2.7
python2.7-config
smtpd.py
wheel

docker二进制文件在第二个测试图像中的位置是什么? 我如何安装python和docker,即/ usr / local / bin中的python和docker可执行文件?

1 个答案:

答案 0 :(得分:3)

看起来您正在使用docker多阶段构建。这意味着您生成的图像只包含最后FROM个。出于同样的原因,您在ubuntu图片图层中没有docker内容。

您需要COPY上一层的二进制文件:

FROM ubuntu
FROM docker as docker
FROM python:2.7-slim
COPY --from=docker /usr/local/bin/* /usr/local/bin/
CMD ["ls", "/usr/local/bin"]

请注意,您还可以按索引引用之前的图像,as是可选的:

COPY --from=1 /usr/local/bin/* /usr/local/bin/

Dockerfile COPY参考here

多阶段构建文档here