[英]read file in docker volume from docker container
我在 github 上有一个 osrm 后端的 docker 映像。
当我启动容器时,会运行 profile.lua 脚本,它会触发 a.cpp 文件来读取文件 rastersource.asc 的内容。
该文件的路径在 lua 脚本中定义。
镜像中的 C++ 文件位于 scr/extractor/rastersource.cpp 中,profile.lua 和 rasterscource.asc 都在e:/docker
docker 中,因此它们都应该在卷中。
我所做的是运行容器:
docker run -t -v e:/docker:/data osrm/osrm-backend osrm-extract -p /data/profile.lua /data/location-latest.osm.pbf
但是现在我很难定义 rastersource.cpp 应该从中读取文件的绝对路径。
.lua 代码:
raster_source = raster:load(
os.getenv('file/path/which/is/unknown.asc'),
4.86, -- longitude min
5.5, -- longitude max
51.95, -- latitude min
52.286, -- latitude max
169, -- number of rows
321 -- number of cols
),
.cpp 代码
int RasterContainer::LoadRasterSource(const std::string &path_string,
double xmin,
double xmax,
double ymin,
double ymax,
std::size_t nrows,
std::size_t ncols)
{
...
boost::filesystem::path filepath(path_string);
if (!boost::filesystem::exists(filepath))
{
throw util::RuntimeError(
path_string, ErrorCode::FileOpenError, SOURCE_REF, "File not found");
}
}
我得到的错误是:
terminate called after throwing an instance of 'sol::error'
what(): lua: error: Problem opening file: (possible cause: "File not found") (at src/extractor/raster_source.cpp:112)
我发现了很多关于这个问题的问题,但我不明白任何答案。
我希望这里有人可以帮助我。 提前致谢。
如果您的文件位于主机上的e:/docker/rastersource.asc
中,则它应该位于容器内的/data/rastersource.asc
中。
如果您的容器有 bash (例如),那么执行以下操作可能会有所帮助
docker run -it -v e:/docker:/data osrm/osrm-backend osrm-extract bash
以交互方式运行您的容器,以便手动查看容器文件系统并可能以交互方式运行任何其他命令。
我正在使用 os.getenv()。 没有它一切正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.