我有一个Makefile一些使用PCI设备的c++代码
all:
g++ -o executable main.cpp dragon.pb.cc -std=c++11 -O3 -I/usr/include/postgresql -I/usr/include/hiredis -lzmq -lprotobuf -lpthread -lpq -lhiredis
clean:
rm executable
并且它依赖于使用内核函数的C库。这个库的Makefile是
# dist and build are folders, not phony targets
.PHONY: all package clean
all: dragon.pb.cc dragon_pb2.py package
dragon.pb.cc: dragon.proto
protoc --cpp_out=. dragon.proto
dragon_pb2.py: dragon.proto
protoc --python_out=. dragon.proto
package: build
clean:
rm -f dragon.pb.*
rm -f dragon_pb*
rm -rf build
rm -rf dist
rm -f MANIFEST
这是我的Dockerfile
FROM ubuntu:14.04
ENV PG_MAJOR 9.3
RUN apt-get update
RUN apt-get install -y git make protobuf-compiler libhiredis-dev postgresql-server-dev-${PG_MAJOR}
RUN apt-get install -y g++
RUN apt-get install -y libzmq-dev
RUN apt-get install -y libprotobuf-dev
RUN apt-get install -y linux-headers-$(uname -r)
ADD deployment_key /root/.ssh/id_rsa
RUN chmod 600 /root/.ssh/id_rsa
RUN echo "StrictHostKeyChecking no" >> /root/.ssh/config
RUN echo >> /root/.ssh/config
RUN echo "Host bitbucket.org" >> /root/.ssh/config
RUN mkdir -p /usr/src/app/
WORKDIR /usr/src/app/
RUN git clone git@bitbucket.org:opticsdevelopment/dragon-protocols.git
WORKDIR ./dragon-protocols
RUN make dragon.pb.cc
RUN cp ./dragon.pb.* ../
COPY . /usr/src/app
WORKDIR ../
RUN git clone git@bitbucket.org:opticsdevelopment/dragon-module.git
WORKDIR ./dragon-module
RUN make all
WORKDIR ../
RUN make
EXPOSE 5570
CMD ["dragon"]
现在的问题是在安装linux-headers。它找不到头文件
E: Unable to locate package linux-headers-3.13.0-19-generic
E: Couldn't find any package by regex 'linux-headers-3.13.0-19-generic'
如果你的应用程序可以编译任何通用的linux头文件
在你的Dockerfile
变化
RUN apt-get install -y linux-headers-$(uname -r)
RUN apt-get install -y linux-headers-generic
或者如果您需要与主机系统相同的特定属性为什么不直接用-v
把这个目录从主机卷链接到docker容器呢?
:
sudo apt-get install linux-headers-$(uname -r)
/usr/src/linux-headers-$(uname -r)/include
现在在你的docker容器上运行命令,链接卷,像
-v /usr/src/linux-headers-$(uname -r)/include:/usr/src/linux-headers-$(uname -r)/include