我试图在docker中运行cpp
应用程序。构建executable
并创建Dockerfile
后,由于某种原因,我无法在docker内部运行它:>
main.cpp
#include<iostream>
#include<chrono>
#include<thread>
#include<string>
#include <unistd.h>
int main(int argc,char *argv[])
{
std::cout<<"Started daemon..."<<std::endl;
std::string hostString(argv[1]);
std::cout<<"HostName:"<<hostString<<std::endl;
std::cout<<"Port:"<<std::stoi(argv[2])<<std::endl;
int i=0;
while(true){
std::cout<<"Iterations:"<<i++<<std::endl;
std::this_thread::sleep_for (std::chrono::seconds(1));
if(i++>10000) i=0;
}
return 0;
}
Dockerfile
FROM ubuntu:latest
RUN mkdir -p /home/dockerc
COPY . /home/dockerc
ENTRYPOINT ["/home/dockerc/main","127.0.0.1","8350"]
dockerc文件夹
我运行以下命令:
g++ main main.cpp
docker build app .
docker images
(表明已创建app
图片)
docker run app
构建成功,但是当我按下run
时,它似乎被阻止了。只是没有继续。
怎么了?有人可以帮我吗?我是docker的新手。
PS 等待10分钟后,我收到一则长的错误消息,该错误消息以以下内容开头:
$ docker run cpapp
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: container a575e463f193dbc475aab78c1810486e23981a50c 0b731f9c891c4143d0ed5b3 encountered an error during CreateProcess: failure in a Windows system call: The compute system exited unexpecte dly. (0xc0370106)
答案 0 :(得分:2)
您应将完整路径放入ENTRYPOINT
并将参数添加到程序中。
此Dockerfile可以完成工作:
FROM ubuntu:latest
RUN mkdir -p /home/dockerc
COPY . /home/dockerc
ENTRYPOINT ["/home/dockerc/main", "hostname", "8000"]
用所需的主机名和端口替换hostname
和8000
。
修改
我在Linux上测试了您的程序,要使其运行,我必须:
1)为c ++ 11编译(由于chrono
)
2)添加-t
以构建docker应用
这是要运行的命令的完整列表:
g++ -o main main.cpp -std=c++11
docker build -t app .
docker run app
这是输出:
答案 1 :(得分:1)
用RUN cd...
代替WORKDIR ...
您的CD在这种情况下不是您所期望的,并且在下一行被忘记了
您还可以删除RUN cd...
行并将整个路径放入
ENTRYPOINT
行