宿主机:Ubuntu-22.04 Docker容器:Ubuntu-18.04 OpenFOAM版本:v2.3.1
问题描述
Ubuntu-22.04中的gcc-11版本过高,无法编译低版本OpenFOAM(v2.3.1需要gcc-4.8~5.5)。
解决方案
- 创建基于
Ubuntu-18.04
的Docker容器 - 搭建OpenFOAM编译环境
- 建立宿主机
OpenFOAM
代码与算例的目录到docker目录的映射 - 宿主机下修改代码
- Docker容器中编译代码,执行算例
- 宿主机下
Tecplot
/Paraview
查看结果
依赖
- 查看官方教程安装docker。
- 设置免ROOT使用docker命令
具体步骤
拉取OpenFOAM231-docker脚本
例如放到$HOME/github
文件夹
|
|
或者
|
|
创建of231
镜像
运行脚本prepareOpenFOAM231.sh
:
|
|
输出如下:
|
|
使用镜像
首先在宿主机$HOME/OpenFOAM
文件夹下创建OpenFOAM环境变量文件of-env.bashrc
,内容如下:
|
|
运行脚本startOpenFOAM231.sh
|
|
输出:
|
|
在docker中激活openfoam环境:
|
|
最后可以编译或运行算例了。
Appendix
Docker镜像相关
创建docker镜像:
|
|
打tag:
|
|
登录dockerhub:
|
|
推送到dockerhub:
|
|
向已有的镜像中添加挂载目录
参考这个方法stackoverflow:
- 首先关闭Docker服务
1
systemctl stop docker.service
- 找到容器ID与文件路径查看目录下的文件
1 2 3 4 5
# 在该命令的输出中,查找你想要修改的容器的ID docker container ls -a # 替换“<>”为你的ID,找到容器文件的路径 cd /var/lib/docker/containers/<YOUR_CONTAINER_ID>
ls -lht
,比如输出为:1 2 3 4 5 6 7 8 9
-rw-r----- 1 root root 7.0M Dec 11 16:35 8ea1e4429ac9ea43df1c58ed206427383771c9724e757b369686d9440e2dc465-json.log -rw------- 1 root root 4.6K Dec 11 16:11 config.v2.json -rw------- 1 root root 1.6K Dec 11 16:11 hostconfig.json -rw-r--r-- 1 root root 13 Dec 11 16:11 hostname -rw-r--r-- 1 root root 174 Dec 11 16:11 hosts -rw-r--r-- 1 root root 806 Dec 11 16:11 resolv.conf -rw-r--r-- 1 root root 71 Dec 11 16:11 resolv.conf.hash drwx--x--- 2 root root 4.0K Sep 26 17:02 mounts drwx------ 2 root root 4.0K Sep 26 17:02 checkpoints
- 修改
config.v2.json
配置文件,找到“MountPoints”
关键字,在其中添加你想要挂载的目录,例如: 原始内容:挂载宿主机目录1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
"MountPoints": { "/etc/group": { "Source": "/etc/group", "Destination": "/etc/group", "RW": false, "Name": "", "Driver": "", "Type": "bind", "Relabel": "ro", "Propagation": "rprivate", "Spec": { "Type": "bind", "Source": "/etc/group", "Target": "/etc/group", "ReadOnly": true }, "SkipMountpointCreation": false } }
/home/<USER>/Data/simulation
到容器目录/home/<USER>/calc
下:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
"MountPoints": { "/etc/group": { "Source": "/etc/group", "Destination": "/etc/group", "RW": false, "Name": "", "Driver": "", "Type": "bind", "Relabel": "ro", "Propagation": "rprivate", "Spec": { "Type": "bind", "Source": "/etc/group", "Target": "/etc/group", "ReadOnly": true }, "SkipMountpointCreation": false }, "/home/<USER>/calc": { "Source": "/home/<USER>/Data/simulation", "Destination": "/home/<USER>/calc", "RW": false, "Name": "", "Driver": "", "Type": "bind", "Relabel": "ro", "Propagation": "rprivate", "Spec": { "Type": "bind", "Source": "/home/<USER>/Data/simulation", "Target": "/home/<USER>/calc", "ReadOnly": true }, "SkipMountpointCreation": false } }
- 重启docker服务:
1
systemctl start docker.service
- 进入容器:
1
docker start <YOUR_CONTAINER_ID>