首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展本地Dockerfile

扩展本地Dockerfile
EN

Stack Overflow用户
提问于 2016-04-14 08:42:43
回答 5查看 33K关注 0票数 38

我正在尝试将Dockerfile建立在另一个本地的基础上。

代码语言:javascript
复制
$ 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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-11-22 12:26:13

Stack Overflow用户

发布于 2016-04-14 10:23:37

Dockerfiles不扩展Dockerfile,而是扩展图像,FROM行不是一个“包含”语句。

因此,如果要“扩展”另一个Dockerfile,则需要将原始Dockerfile构建为图像,并扩展该映像。

例如;

Dockerfile1:

代码语言:javascript
复制
FROM alpine
RUN echo "foo" > /bar

Dockerfile2:

代码语言:javascript
复制
FROM myimage
RUN echo "bar" > /baz

构建第一个Dockerfile (因为它名为Dockerfile1,请使用-f选项作为默认设置来查找名为Dockerfile的文件),并将其“标记”为myimage

代码语言:javascript
复制
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,它扩展了您刚刚构建的映像。我们标记的结果图像为“我的扩展酒窝”;

代码语言:javascript
复制
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)都在图像中;

代码语言:javascript
复制
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

我建议阅读用户指南,说明如何处理图像和容器

票数 22
EN

Stack Overflow用户

发布于 2016-04-14 10:40:36

我为此编写了简单的bash脚本。它接下来的工作方式是:示例结构:

代码语言:javascript
复制
|
|_Dockerfile(base)
|_prod
  |_Dockerfile(extended)

Dockerfile(扩展):

代码语言:javascript
复制
FROM ../Dockerfile
...

运行脚本:

代码语言:javascript
复制
./script.sh prod

它将您的基本dockerfile与扩展和生成合并文件合并。剧本:

代码语言:javascript
复制
#!/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 resDocker
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36617904

复制
相关文章

相似问题

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