使用Docker ADD命令获取多个文件

时间:2014-10-27 16:09:42

标签: regex docker

我想将一些文件复制到我的图像中,我想使用ADD命令。我在Docker文档中读到了ADD的正则表达式,但我不知道我可以使用哪种表达式?

我想要这样的东西

FROM registry:5000/ubuntu:14.04
MAINTAINER Me

# some stuffs 

ADD Sources/{file1,file2,load_file} /etc/Sources/

# more stuffs

注意:表达式错误,但我这样做是为了向您展示我对ADD命令的期望。 (我是用shell正则表达式思考的。)

那么,我该怎么做?我无法访问链接filepath.Match。如果有人有这些规则,请告诉我?

更新

我正在使用this Docker docs reference

我正在使用这个版本:

Client version: 1.3.0
Client API version: 1.15
Go version (client): go1.3.3
Git commit (client): c78088f
OS/Arch (client): linux/amd64
Server version: 1.3.0
Server API version: 1.15
Go version (server): go1.3.3
Git commit (server): c78088f

4 个答案:

答案 0 :(得分:21)

ADD命令和COPY都允许Golang filepath.Match wildcards

您可以在Go的测试代码中找到许多示例:https://golang.org/src/pkg/path/filepath/match_test.go

此处转载的规则适用于无法访问Google / golang.org的中国人:

    '*'         matches any sequence of non-Separator characters
    '?'         matches any single non-Separator character
    '[' [ '^' ] { character-range } ']'
                character class (must be non-empty)
    c           matches character c (c != '*', '?', '\\', '[')
    '\\' c      matches character c

character-range:
    c           matches character c (c != '\\', '-', ']')
    '\\' c      matches character c
    lo '-' hi   matches character c for lo <= c <= hi

答案 1 :(得分:4)

通常,您最终会将所有相关文件放入子目录,然后只是ADD该目录,以将它们带入图像。

答案 2 :(得分:0)

示例如何将带有ext .so的文件添加到目录:

ADD modules/*.so /usr/local/apache2/modules/

或者您可以将所有文件添加到目录中

ADD modules/* /usr/local/apache2/modules/

答案 3 :(得分:0)

请注意,您可以在ADD中提供一个url。在url中,您将不会执行以下操作:

ADD http://myStorage.com/something/*.jar /dir1/dirb