相关疑难解决方法(0)

如何让docker容器从stdin读取?

我有一个脚本,我想用它来使用Sigil(基于Go的模板引擎)来填充模板文件

我正在使用一个dockerized sigil来实现这个目的:

docker run -v ${TEMPLATE_DIR}:/tmp/sigil mikegrass/gliderlabs_sigil-docker/sigil -f prometheus-configmap.yaml -p API_SERVER=$api_server_url > $TEMP_FILE
Run Code Online (Sandbox Code Playgroud)

这似乎有点笨重,不得不映射一个卷,所以我宁愿使用STDIN传入文件....

所以我想要的是

cat ./prometheus-configmap.yaml | docker run mikegrass/gliderlabs_sigil-docker -p API_SERVER=$api_server_url > $TEMP_FILE
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用,我没有输出.

谷歌搜索我看到可能的解决方案,但没有任何工作......

有什么建议?

谢谢

docker

8
推荐指数
1
解决办法
5894
查看次数

使用 docker 读取输入文件

我正在编写一个运行如下的 C++ 程序:

./program data_file config_file
Run Code Online (Sandbox Code Playgroud)

我想和它一起使用 docker。我写了以下内容Dockerfile

FROM gcc:7.2.0
ENV MYP /repo
WORKDIR ${MYP}
COPY . ${MYP}

RUN /bin/sh -c 'make'
ENTRYPOINT ["./program"]
CMD ["file1", "file2"]
Run Code Online (Sandbox Code Playgroud)

所以我docker build -t test .使用它并使用docker run test默认值查看一切正常。

但是,如果我file1在我的工作目录中修改(构建之后),我注意到当我运行时docker run test file1 file2,被file1调用的是容器内的那个,作为参数输入的那个被忽略了。

同样,如果我使用重命名的数据和配置文件并运行docker run test file3 file4,我会收到一条错误消息,指出这些文件不存在(因为它们不在容器中)。

那么,如何让 docker 识别这些作为参数传递的输入文件,避免使用图像中包含的文件?

Docker 版本为 18.04.0-ce,构建 3d479c0af6。

编辑

另一种选择是使用如下launch.sh脚本:

#!/bin/sh
./program "${DATA_FILE}" "${CONFIG_FILE}"
Run Code Online (Sandbox Code Playgroud)

所以ENTRYPOINT和 …

c++ docker

4
推荐指数
1
解决办法
3690
查看次数

标签 统计

docker ×2

c++ ×1