我试图在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的新手。
P.S 在等待大约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)
最佳答案
您应将完整路径放在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
这是输出:
关于c++ - Docker无法启动cpp应用程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52410006/