如何从头开始构建Dockerfile /容器以简单地提供文件

时间:2018-08-23 18:13:26

标签: docker dockerfile docker-build

我正在尝试从头开始创建一个非常简单的图像,以简单地提供一个文件。但是我(在学习队列中)写dockerfile有点不熟练。

Id就像容器启动时一样,它将文件从容器复制到映射卷上的本地主机上,除此之外没有其他任何东西。我努力做到这一点,我可以很好地构建图像,但是无法将文件放入本地框中。

Dockerfile

FROM scratch
ADD datafile.dat /datafile.dat
ADD true /true
VOLUME ["/tmp/"]
COPY datafile.dat /tmp
CMD ["/true"]

'true'只是回声程序。我用

构建它
docker build -t datafile:latest -f Dockerfile .

显然,构建可以正常进行。但是,当我尝试运行它时,我什么也没得到,并且容器存在错误。

$ docker run -dt -v /:/tmp datafile:latest 
0a317b5d7459c86ff260513093d115f94be74671ebc08bc125d9e871a55695c5
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
0a317b5d7459        datafile:latest     "/true"             6 seconds ago       Exited (1) 4 seconds ago                       laughing_keller
$ docker logs 0a3
standard_init_linux.go:195: exec user process caused "no such file or directory"

来自建筑目录

$ ll
total 36
-rw-rw-r--. 1 vUser vUser     0 Aug 23 12:59 datafile.dat
-rw-rw-r--. 1 vUser vUser   126 Aug 23 13:06 Dockerfile
-rwxr-xr-x. 1 vUser vUser 28920 Aug 23 13:05 true

2 个答案:

答案 0 :(得分:0)

您可以使用docker copy命令将文件从Container复制到本地磁盘。

    $('#loading-data3').hide();

    var i = 0;
    var count = data.total;
    console.log(count);
    for (i = 0; i <= count; i++) {
        $('#remaining-time').find('tbody').append(
            "<tr><td>" + data.data[i].ASSIGNEE + "</td><td>" +
            data.data[i].totalEstimateTime + "</td><td>" +
            data.data[i].timeSpent + "</td><td>" +
            data.data[i].remainTime + "</td></tr>"
        );
    }

}

此外,您可以先尝试以交互方式尝试尝试手动复制文件,然后看看会发生什么。 docker run -i --rm -v $ {PWD} / tmp:/ tmp / datafile:最新bash

答案 1 :(得分:0)

我最终在 go 中创建了一个非常小的“cat like”二进制文件并将图像构建为:

FROM scratch
COPY FILE_I_WANT_TO_SHARE /
COPY catgo /
ENTRYPOINT ["/catgo", "/FILE_I_WANT_TO_SHARE"]

如果有人对此感兴趣,请进行编码:

package main

import (
    "os"
    "log"
    "io"
)

func readWrite(src io.Reader, dst io.Writer) {
}

func main() {
    if len(os.Args) == 1 {
        _, err := io.Copy(os.Stdout, os.Stdin)
        if err != nil {
            log.Fatal(err)
        }
    } else {
        for _,fname := range os.Args[1:] {
            fh, err := os.Open(fname)
            if err != nil {
                log.Fatal(err)
            }

            _, err = io.Copy(os.Stdout, fh)
            if err != nil {
                log.Fatal(err)
            }
        }
    }
}