如何在同一docker文件中使用docker文件中创建的可执行文件
我想要的:我想要在容器中运行一个使用opencv的cpp文件 我所做的: 安装opencv的映像:如何在同一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
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