Docker容器中挂载NFS共享目录
之前在https://blog.csdn.net/fengbingchun/article/details/110561129 介紹過使用Dockerfile構建ubuntu 16.04鏡像,并在容器中編譯執行Messy_Test項目.這里介紹下如何在容器中掛載NFS服務器上的共享目錄.
Dockerfile內容如下:
FROM ubuntu:16.04
LABEL maintainer="FengBingchun fengbingchun@163.com" \version="1.0" \description="dockerfile test"
RUN dep_items='git g++-5 nfs-common make' \&& apt-get update \&& apt-get install -y $dep_items \&& ln -s /usr/bin/g++-5 /usr/bin/g++ \&& ln -s /usr/bin/gcc-5 /usr/bin/gcc \&& mkdir -p /mnt/nfs \&& rm -rf /var/lib/apt/lists/*
構建鏡像,執行以下命令后會成功生成名字為fengbingchun/ubuntu:16.04的鏡像:
docker build -t fengbingchun/ubuntu:16.04 .
通過掛載主機目錄,新建容器test,執行以下命令中的一條,推薦使用第一條:
docker run --cap-add sys_admin -it -P --name test --mount type=bind,source=e:\GitCode\docker,target=/home/fengbingchun fengbingchun/ubuntu:16.04 /bin/bash
docker run --privileged=true -it -P --name test --mount type=bind,source=e:\GitCode\docker,target=/home/fengbingchun fengbingchun/ubuntu:16.04 /bin/bash
在容器內依次執行如下命令進行掛載,假設nfs服務器ip為10.107.2.1,共享目錄為shared:
/etc/init.d/rpcbind start
mount -t nfs 10.107.2.1:/shared /mnt/nfs
創建軟鏈接,并將cmake可執行文件路徑加入環境變量,依次執行如下命令:
ln -s /mnt/nfs/Ubuntu-16.04/ /usr/local/toolchains
echo "export PATH=/usr/local/toolchains/bin:$PATH" >> /etc/profile
source /etc/profile
因此創建鏡像時并沒有安裝cmake,執行source命令后,執行cmake --version可看到cmake版本相關信息,如下圖所示:
然后在容器內,cd到/home/fengbingchun目錄下,clone Messy_Test執行以下命令:
git clone https://github.com/fengbingchun/Messy_Test
然后cd到Messy_Test/prj/linux_cmake_CppBaseTest目錄下,依次執行如下命令:
./build.sh
./build/CppBaseTest
執行結果如下圖所示,說明通過Dockerfile構建的鏡像,并在容器內掛載NFS共享目錄后,通過共享目錄中的cmake可正常編譯執行Messy_Test:
在容器內也可查看NFS服務器共享了哪些目錄,執行以下命令:
showmount -e 10.107.2.1
保存鏡像fengbingchun/ubuntu:16.04到tar包,執行以下命令:
docker save -o ubuntu_16.04.tar fengbingchun/ubuntu:16.04
將ubuntu_16.04.tar拷貝到ubuntu系統下,從tar包加載一個鏡像,執行以下命令:
docker load -i ubuntu_16.04.tar
然后執行windows上類似的操作,在新創建的容器test中編譯、執行Messy_Test,依次執行如下命令:
docker run --privileged=true -it -P --name test --mount type=bind,source=/home/xxxx/Disk/GitHub/docker,target=/home/fengbingchun fengbingchun/ubuntu:16.04 /bin/bash
/etc/init.d/rpcbind start
mount -t nfs 10.107.2.1:/shared /mnt/nfs
ln -s /mnt/nfs/Ubuntu-16.04/ /usr/local/toolchains
echo "export PATH=/usr/local/toolchains/bin:$PATH" >> /etc/profile
source /etc/profile
cd /home/fengbingchun/
git clone https://github.com/fengbingchun/Messy_Test
cd Messy_Test/prj/linux_cmake_CppBaseTest/
./build.sh
./build/CppBaseTest
執行結果如下圖所示:說明在Windows上生成的鏡像打包后,在Ubuntu上load后可正常使用:
注意:
(1).在ubuntu上,創建容器時要使用"--privileged=true",否則執行掛載時會報"mount.nfs: access denied by server while mounting 10.107.2.1:/shared"的錯誤;
(2).在Windows上有時在容器中會有卡死的現象,可刪除此容器,然后再新建容器.
總結
以上是生活随笔為你收集整理的Docker容器中挂载NFS共享目录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过Dockerfile构建Docker
- 下一篇: Ubuntu上配置VS Code调试C+