0

就我而言,我正在创建一个需要从主机复制到容器的 config.json。

我发现有一些选项可以将 args 传递给我的 dockerfile。所以第一步是:

1.创建Dockerfile:

FROM golang
WORKDIR /go/src/app
COPY . .                     /* here we have /foo directory */
COPY  $CONFIG_PATH ./foo/
EXPOSE $PORT
CMD ["./foo/run", "-config", "./foo/config.json"]

如您所见,我有 2 个变量 [“$CONFIG_PATH”、“$PORT”]。

所以这些变量是动态的,来自我在docker run中的命令。在这里,我需要将我的配置文件从我的主机复制到我的容器,并且我需要使用该config.json文件运行我的项目。

构建图像后:

  1. 第二步:

从用户那里获取我的配置文件并使用这些变量运行 docker 映像。

let configFilePath = '/home/baazz/baaaf/config.json'
let port = "8080"
docker.run('my_image', null, process.stdout, { Env: [`$CONFIG_PATH=${configFilePath}`, `$PORT=${port}`] }).then(data => {

        }).catch(err => { console.log(err) })

当我尝试执行我的代码时收到此错误消息。

打开 JSON 配置 (./foo/config.json) 时出错:打开 ./foo/config.json: no such file or directory 。终止。

4

1 回答 1

0

您通常不希望COPY在 Docker 映像中配置这样的文件。您应该能够docker run在多个环境中使用相同的图像而无需修改。

相反,您可以docker run -v在运行映像时使用该选项注入正确的配置文件:

docker run -v $PWD/config-dev.json:/go/src/app/foo/config.json my_image

Dockerode 主页显示了一个等效Binds选项。在 Docker Compose 中,这进入 per-container volumes:。不要求两个路径或文件名匹配。)

由于像这样的文件路径成为人们运行容器的外部接口的一部分,因此您通常希望在构建时使它们可配置。选择一个固定的路径并记录它是安装自定义配置文件的地方。

于 2019-12-04T17:54:22.437 回答