【发布时间】:2019-12-05 01:54:22
【问题描述】:
在我的例子中,我正在创建一个 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 文件运行我的项目。
构建镜像后:
- 第二步:
从用户那里获取我的配置文件并使用这些变量运行 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: 没有这样的文件或目录。终止。
【问题讨论】:
-
您展示的 Dockerfile 中的变量在
build期间使用,而不是在run期间使用。由于它仅适用于copy和expose,因此绝对没有必要将它们传递给您的 docker 容器。您是否检查了图像文件系统以检查配置文件是否已复制到正确的路径?我怀疑它已被复制到子目录(即CONFIG_PATH的目录名)。