我正在尝试将Dockerfile建立在另一个本地的基础上。
$ ls -lR
total 0
-rw-r--r-- 1 me me 42 14 avr 10:42 Dockerfile
drwxr-xr-x 3 me me 42 14 avr 10:42 prod
./prod:
total 0
-rw-r--r-- 1 me me 42 14 avr 10:42 Dockerfile
$ cat prod/Dockerfile
FROM ../Dockerfile
...
$ docker build - < prod/Dockerfile无法处理Dockerfile:无法解析存储库信息:存储库名称组件必须匹配“a-Z0-9(?:.a-Z0-9)*”
我知道FROM需要的是图像,而不是路径。
如何从Dockerfile扩展prod/Dockerfile?
发布于 2017-11-22 12:26:13
发布于 2016-04-14 10:23:37
Dockerfiles不扩展Dockerfile,而是扩展图像,FROM行不是一个“包含”语句。
因此,如果要“扩展”另一个Dockerfile,则需要将原始Dockerfile构建为图像,并扩展该映像。
例如;
Dockerfile1:
FROM alpine
RUN echo "foo" > /barDockerfile2:
FROM myimage
RUN echo "bar" > /baz构建第一个Dockerfile (因为它名为Dockerfile1,请使用-f选项作为默认设置来查找名为Dockerfile的文件),并将其“标记”为myimage
docker build -f Dockerfile1 -t myimage .
# Sending build context to Docker daemon 3.072 kB
# Step 1 : FROM alpine
# ---> d7a513a663c1
# Step 2 : RUN echo "foo" > /bar
# ---> Running in d3a3e5a18594
# ---> a42129418da3
# Removing intermediate container d3a3e5a18594
# Successfully built a42129418da3然后构建第二个Dockerfile,它扩展了您刚刚构建的映像。我们标记的结果图像为“我的扩展酒窝”;
docker build -f Dockerfile2 -t myextendedimage .
# Sending build context to Docker daemon 3.072 kB
# Step 1 : FROM myimage
# ---> a42129418da3
# Step 2 : RUN echo "bar" > /baz
# ---> Running in 609ae35fe135
# ---> 4ea44560d4b7
# Removing intermediate container 609ae35fe135
# Successfully built 4ea44560d4b7要检查结果,从图像中运行一个容器,并验证两个文件(/bar和/baz)都在图像中;
docker run -it --rm myextendedimage sh -c "ls -la ba*"
# -rw-r--r-- 1 root root 4 Apr 14 10:18 bar
# -rw-r--r-- 1 root root 4 Apr 14 10:19 baz我建议阅读用户指南,说明如何处理图像和容器
发布于 2016-04-14 10:40:36
我为此编写了简单的bash脚本。它接下来的工作方式是:示例结构:
|
|_Dockerfile(base)
|_prod
|_Dockerfile(extended)Dockerfile(扩展):
FROM ../Dockerfile
...运行脚本:
./script.sh prod它将您的基本dockerfile与扩展和生成合并文件合并。剧本:
#!/bin/bash
fromLine=$(head -n 1 $1/Dockerfile)
read -a fromLineArray <<< $fromLine
extPath=${fromLineArray[1]}
tail -n +2 "$1/Dockerfile" > strippedDocker
cat $1/$extPath strippedDocker > resDocker
rm strippedDocker
docker build - < resDocker
rm resDockerhttps://stackoverflow.com/questions/36617904
复制相似问题