Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在同一docker文件中使用docker文件中创建的可执行文件_Docker - Fatal编程技术网

如何在同一docker文件中使用docker文件中创建的可执行文件

如何在同一docker文件中使用docker文件中创建的可执行文件,docker,Docker,我想要的:我想要在容器中运行一个使用opencv的cpp文件 我所做的: 安装opencv的映像: docker pull spmallick/opencv-docker:opencv 创建一个docker文件 FROM spmallick/opencv-docker:opencv RUN ["g++ a.cpp -o a.out"] COPY . . CMD ["./a.out"] bash命令 sudo docker build -t projec

我想要的:我想要在容器中运行一个使用opencv的cpp文件

我所做的:

安装opencv的映像:

docker pull spmallick/opencv-docker:opencv
创建一个docker文件

FROM spmallick/opencv-docker:opencv
RUN ["g++ a.cpp -o a.out"]
COPY . .
CMD ["./a.out"]
bash命令

sudo docker build -t project_opencv 
OCI运行时创建失败:container_linux.go:349:启动容器进程导致“exec:”g++a.cpp-o a.out“:在$PATH中未找到可执行文件”:未知

首先,我尝试使用cmd而不是RUN()。虽然我已经复印了,但还是找不到答案。
现在,创建.out似乎有问题。首先将a.cpp复制到docker映像中,然后运行命令将工作,我不确定您的运行[“g++a.cpp-o a.out”]命令是否工作,但请尝试以下操作:

FROM spmallick/opencv-docker:opencv
COPY . .
RUN ["g++ a.cpp -o a.out"] 
CMD ["./a.out"]

我认为您需要检查从主机复制到容器中的文件的权限

您还可以检查您所在的目录,如果需要更改目录,则可以在Dockerfile中使用
WORKDIR
命令


在容器中启动bash会话并手动运行命令也很有用。对于每个成功的命令,您可以将该命令输入Dockerfile,或者如果遇到错误,您也可以更轻松地进行故障排除,而不是每次都更改Dockerfile并运行,如果您需要调试,这将非常耗时。

当您使用JSON数组形式的
运行
(或
CMD
ENTRYPOINT
),您可以显式地提供组成该命令的一组“单词”。如您所示,它是一个单词,Docker会尝试这样运行它,包括它正在查找的命令名中的空格。您需要自己将其拆分为组成单词

RUN ["g++", "a.cpp", "-o", "a.out"]
相反,此命令中不存在拆分、扩展或插值:

# Preserves both the literal $ and the spaces
RUN ["cp", "dollars-word-$word.txt", "file name with spaces.txt"]
特别是对于
RUN
来说,通常使用shell表单。这将命令包装在
sh-c
中,因此它的工作方式与普通命令类似。(对于
CMD
ENTRYPOINT
,您可能不希望使用此命令有一些技术原因)

RUN g++ a.cpp -o a.out
RUN cp dollars-word-\$word.txt, 'file name with spaces.txt'
RUN tail env-var-$word.txt