解决 Docker 数据卷挂载的文件权限问题

解决 Docker 数据卷挂载的文件权限问题,第1张

Docker 提供了数据卷 绑定挂载 的机制(volume bind mounts)来将主机上的文件 (file) 或者目录 (directory) 挂载进容器 (container)。也就是 docker run 命令中熟知的 -v 参数。根据 Docker 官方文档,绑定挂载一般适合于 三种场景 : 但是实际使用时,会遇到文件权限问题: 譬如执行如下命令创建一个容器,挂载当前目录到容器内,并在容器内向主机当前目录创建 tmp.txt: 主机当前目录出现了容器内创建的 tmp.txt,但是其权限、用户和组均是 root,其他用户不可写。 常见解决方法是可以通过 Docker 提供的 User 命令、 --user 参数 来指定容器内部的用户和组的 id,譬如: 可以看到输出,current_user 处会显示主机当前用户的名字,所以解决了主机用户对挂载的卷没有权限的问题。 user 参数的缺陷 使用 user 参数有一些缺陷,如果你进入容器内部的 terminal,会显示如下内容: b.sh 的用户名会显示 I have no name!,这是因为我们通过 --user 参数指定了容器内部的用户 id,但该 id 不存在于容器内的 /etc/passwd 文件中。 除此之外,使用 user 参数仍然存在权限问题: 除了绑定挂载的主机路径之外的所有路径,对于容器内部的用户都没有写权限。 这也是不可接受的,因为容器运行过程中我们可能会进行一些临时文件的写入,这些临时文件我们并不想要写到主机的挂载目录,但除了挂载路径之外的任何路径容器都没有写入权限。 譬如我们在主机上创建 models 目录。 我们使用 Docker 挂载 models 目录,然而在 Docker 容器内部除了 models 文件夹都没有访问权限。 这可以通过增加挂载路径: 这样容器运行过程往 /project 写的临时文件都会出现在主机上。 可见, user 参数并不能解决所有问题。它存在两个问题: 我们需要一种手段,既可以像 user 参数一样在容器运行时可以将用户切换到和主机相同的用户,又希望 Docker 容器保留 root 用户,并给主机用户想要访问的目录授权(对特定目录 chown 、 chmod 等)。 Docker 官方文档对 Entrypoint 介绍时给出了 一种最佳实践 。 编写如下的 Dockerfile: 该 Dockerfile 中安装了一个 gosu 的工具,并设置了程序的 Entrypoint。由于 Docker 内使用 sudo 可能导致一些不可预知的 TTY 和信号转发问题,所以 Docker 官方推荐了使用 gosu 这个工具,用于保持容器在 root 用户下运行,并用 sudo 来切换到指定用户。 其中 docker-entrypoint.sh 内容如下: 可以看到 docker-entrypoint.sh 中创建了一个名为 user 的用户,该用户的 uid 由 docker run 的参数传入,这里利用了 linux 系统的一个特点,容器内外用户权限的记录和用户的名字无关,只和 uid 有关,因此容器内我们将用户命名为 user 没有影响。docker-entrypoint.sh 最后一行调用 gosu 来切换到 user 用户并执行 Dockerfile 中的用户命令。 有了如上两个脚本,我们构建镜像并执行: 运行容器时指定 LOCAL_USER_ID 参数: 可见不仅容器内往挂载目录 /project/models 写入的文件 model.txt 所有者是主机用户,而且在容器内往非挂载目录 /project/tmp.txt 写入文件也不会遇到权限问题。 Docker 运行时容器内默认使用 root 用户运行,但是我们不是总是想要用 root 用户,因为有时候我们希望容器计算产生一些文件,并通过 volume 的绑定挂载在主机上获取。特别是我们用 jenkins 等工具写一些持续集成的脚本时候。容器内用 root 用户运行会导致产生的文件也是 root 用户的,主机上没有读取权限。因此我们需要让容器在运行的时候切换到主机上的用户。 Docker 对于这种情况仍然没有提供足够便利的基础设施,我们采用了 Docker 官方目前推荐的一个方式,通过编写一个 docker-entrypoint.sh 脚本作为 Dockerfile 的 Entrypoint,脚本中创建和主机上相同 uid 的用户,并通过 gosu 工具切换到该用户执行命令。 uid 需要在 docker run 阶段通过参数传入。我们在脚本中设置了缺省 uid ,上面的脚本随机选择了一个 9001,注意要将该缺省值避免设置成和 Docker 镜像中存在的用户冲突的 uid。 参考链接:

免费引擎Agar - 一个高级图形应用程序框架,用于2D和3D游戏。Allegro library - 基于 C/C++ 的游戏引擎,支持图形,声音,输入,游戏时钟,浮点,压缩文件以及GUI。Axiom 引擎 - OGRE的衍生引擎。Baja 引擎 - 专业品质的图像引擎,用于The Lost Mansion。Boom - Doom代码的一部分。由TeamTNT开发Build 引擎 - 一个第一人称射击游戏引擎,用于Duke Nukem 3D。BYOND - “Build Your Own Net Dream”的所写,支持各种类型的游戏,包括MMORPG。Ca3D-引擎 - 一个比较成熟的引擎,有自己的SDK,世界编辑器等。Cadabra 3D 引擎 - 用于快速开发3D游戏。Catmother - 一个基于BSD授权的引擎,只限个人使用,不能做商业用途。是一家游戏公司的开源引擎。CheapHack - An outdated TomazQuake derived engineCrystal Entity Layer - Crystal Space 3D 引擎的扩充Crystal Space - 3D应用程序的常规框架。Cube - Powers the computer game of the same nameDarkPlaces - 高级免费软件之一。Delta3d - 整合和其他知名免费引擎,最初由美国军方开发。DGD - 一个面向对象的MUD引擎。Doom 引擎 - 现在已经免费的引擎,曾用于Doom和Doom IIDXFramework - 一个简单,带有教学性质的2D/3D引擎,基于DirectX和Visual StudioDX Studio - 一个专业3D引擎,附带编辑器套件,由Worldweaver公司开发。Eclipse - 一个2D MMORPG编辑器。Elysium Source - 2D网络游戏引擎,VB6开发。Engine 001 - 2D 动作类RPG游戏编辑器。Epee 引擎 -一个2D/3D开放源代码图像引擎,多平台。Eternity 引擎 - Doom引擎的一部分。Exult - Ultima VII使用的引擎。FIFE - 辐射1和2使用的标准2D引擎。Game Blender - Blender的子程序,用于开发游戏。Game Maker - 面向对象的软游戏开发平台,支持拖放编辑以及其自己的脚本语言。GQ - 一个Quake引擎,增添了来自TomazQuake和DarkPlaces的许多新特性。GZDoom - 基于ZDoom的引擎。Genesis3D - 用于Windows的3D实时渲染引擎GemRB - A free software implementation of the Infinity EngineG3DRuby - 用于高级3D图形。Haaf's Game Engine - A 2D Hardware Accelerated Game EngineIrrlicht 引擎 - 一个多平台3D图形引擎。Gosu 2D游戏开发库,用于C++。Jogre - 一个基于Java的网络游戏引擎。MRPGe - Visual Basic开发的2D RPG游戏引擎,附带内置的脚本支持,可定制化强,正在开发阶段。M.U.G.E.N - 2D格斗游戏引擎。Multiverse Network - 网络游戏开发平台,包含服务端、客户端,以及一些开发工具(对个人免费)Nebula Device - 由德国的游戏开发工作室开发的实时渲染3D引擎。NeL 引擎 - 用于开发网络游戏的引擎。OctLight - Java游戏引擎,基于OpenGL。Open Game Engine - 一个开源引擎,包含开发游戏所需的各种组件。OGRE Engine - 一个非常流行的面向对象图形渲染引擎,亦称OGRE3D。Online RPG Maker - 一个2D网络游戏引擎,以脚本方式编辑。Panda3D 引擎 - 基于Python的快速开发游戏引擎。PlayerWorlds - 一个简洁且广泛使用的2D网络游戏引擎。PLIB - 包含3D、音效、GUI、窗口管理。支持Linux/Windows/MacOSX。ProQuake - 更动过的Quake引擎。毁灭公爵II引擎 - Quake II的引擎。毁灭公爵III引擎 - Quake III的引擎。Reality Factory - 一个开源引擎,面向非程序员开发,基于Genesis3d图形引擎。RealmForge - 用于微软 .NET Framework的引擎,Visual3D.NET的原始版本。Sauerbraten - 一个基于Cube引擎的优化版。Sonic Robo Blast 2 - A heavily modified Doom Legacy engine for a 3D platform fan-fiction game of the same name.Stratagus - 一个多平台即时战略游戏引擎。Telejano - Quake引擎的修改版。Tenebrae - Quake引擎的修改版。Toi - 一个正在开发的3D游戏引擎,可用于单机和网络游戏开发。Tomb4 - The engine used to play custom Tomb Raider games built using TRLE (Tomb Raider Level Editor)vbGORE - 用Visual Basic 6开发的网络游戏引擎(通过3D函数表达2D图形)Well of Souls - 基于脚本化编辑的2D引擎,附带可视化世界编辑器。Yake - 组件化,面向对象化的的引擎。Zak 引擎 - 为业余和专业游戏开发者开发的2D引擎,基于DirectX 8.1和9。 支持脚本、贴图地图、音效、粒子系统等。 商业引擎Arcane 引擎 - Wolfpack Studios为《Shadowbane》开发的引擎Aurora 引擎 - 为RPG研发的引擎。Beyond Virtual - 一个面向对象化的实时渲染3D引擎,表现优秀。Blade3D - 基于Microsoft XNA的新一代引擎。BRender - A real-time 3D graphics engine for computer games, simulators and graphic toolsC4 Engine - An emerging next-generation computer game engine created by Eric LengyelChrome Engine - NextGen game engine supporting DirectX 10, used mostly for the FPS computer games (Windows, Xbox 360). Developed by TechlandColdstone game engine - an old game creation suite for Macintosh/Windows to create role-playing or adventure-style gamesCryENGINE, CryENGINE2 - CryENGINE是FPS游戏《[孤岛危机]》的游戏引擎。 CryEngine 2 是Crytek为开发FPS游戏《[孤岛危机]》研发的新一代游戏引擎。Dagor Engine 3 - A high-tech cross-platform game engine (3D, physics, game logic) with rich toolset for content developmentDeep Creator - A 3D game engineDoom 3 engine - Used by the games Doom 3, Quake 4, Prey and Quake WarsEAGL (EA Graphics Library) - A cross-platform graphics engine used by Electronic Arts in their EA Sports titles.Earth-4 Engine - The graphics engine used in Earth 2160Electron engine - Currently in development by Obsidian Entertainment for their game Neverwinter Nights 2, based on the Aurora engineeuphoria - A real-time motion synthesis engine by NaturalMotionExplorations - 2d MMO creatorFPSCreator - 3D First Person Shooter creatorFrostbite Engine- Game engine used for the next-gen title Battlefield: Bad CompanyGamebryo - A cross-platform 3D computer graphics engine coded in C++GFX3D - 目标公司为旗下的数款游戏开发的引擎。Havok[1] - Very High-tech cross platform (PC, PS3, Xbox 360 etc) middleware Engine.IMUSE - Specifically designed to synchronize music with visual actionINSANE - Used in LucasArts gamesInfinity Engine - Allows the creation of isometric computer role-playing gamesJedi - A game engine developed by LucasArts for Star Wars: Dark Forces and OutlawsKaneva Game Platform - A full featured MMOG engine for independent and professional game developmentKjAPI - A C++ technology to create games and 3D applications for PC computersLithtech - A competing alternative to the Quake, and Unreal engines.Lithtech Juipter Ex - A new generation Lithtech engine developed by Monolith to create the game F.E.A.R.Medusa - A C++ 3D game engine developed by Palestar and used in the DarkSpace MMO. It features distributed world simulation, single tool version control and asset realisation, cross-platform compatibility and an integrated client/server network system.morpheme - A graphically-authorable animation engine by NaturalMotionMonumental Technology Suite - A MMOG platform, including server and cleint technology and development / live management tools.Multiverse Network - an MMOG platform, including server, client, and tools. (Free for development and use--revenue sharing upon commercial deployment).Odyssey Engine - Used to create three dimensional computer role-playing games, used in Star Wars: Knights of the Old RepublicORE - Online RPG EngineQuest3D - www.quest3d.comPower Render - A general purpose software development kit for games and 3D visualizationRAGE - A game engine created by Rockstar Games use it to power their upcoming video games on the Xbox 360 and PlayStation 3Reality Engine - 3D game engine by Artificial StudiosRelentENGINE - A next-generation FPS engine supporting massive destroyable city environments and realistic vehicle control, makes extensive use of shader model 3.RenderWare - A very popular 3D API and graphics rendering engineRetribution Engine - A game engine to make first person shooter gamesRevolution3D - A 3D graphics engine developed by X-Dream ProjectRPG Maker XP - A 2D engine to make top-down and isometric-style role-playing games for Windows.SAGE engine - Used to create real-time strategy gamesSCUMM engine - Used in LucasArts graphical adventure gamesSerious Engine - The engine by Croteam used in the epic Serious Sam: The First Encounter and the inspirational - The Second EncounterShark 3D - A middleware from Spinor for computer, video games and realtime 3D applicationsSilent Storm engine - A turn-based strategy game engineSith - A game engine developed by Lucasarts for Jedi Knight: Dark Forces IISlayer - A game engine created by The Collective, Inc. and used in Buffy the Vampire Slayer, Star Wars Episode III: Revenge of the Sith, Indiana Jones and the Emperor's Tomb and Wrath UnleashedSource engine - A Game Engine developed by Valve Software for Half-Life 2Torque Game Engine - A modified version of a 3D computer game engine originally developed by Dynamix for the 2001 FPS Tribes 2Torque Game Engine Advanced - A next-generation 3D game engine support modern GPU hardware and shaders.TOSHI - A fourth generation cross platform game engine designed by Blue Tongue EntertainmentTruevision3d - A 3D game engine using the DirectX APIUnigine - Cross-platform middleware with great graphicsUnity - An easy-to-use open-ended 3D game/interactive software engineUnreal engine - One of the most popular game engines for action gamesVengeance engine - A video game engine based on the Unreal Engine 2/2.5Vicious Engine - Available for Microsoft Windows, Sony PlayStation 2, Microsoft Xbox, and Sony PlayStation Portable3DGame Studio - www.3dgamestudio.comVision Game Engine - A commercial game engine used in 50+ titles by companies like T2, Atari, Neowiz and Threewave. Available for PC, Xbox, Xbox360 and PS3Visual3D.NET - 3D platform and visual development environment built upon Microsoft .NET 2.0 and XNA Framework for developing for PC, Xbox 360, and Windows Mobile devices using C#, Visual Basic, J#, C++.NET, JScript.NET, IronPython, and visual scripting.Virtools - A 3D engine combined with unique high-level development framework, used for game prototyping and rapid developments. Available for Windows, Macintosh, Xbox, PSPWhite Engine - Square-Enix's proprietary seventh generation game engine to be used for their PS3 projects.Zero - 3D game engine used in Star Wars: The Clone Wars, Star Wars: Battlefront, and Star Wars: Battlefront IIMaz 3D Game Engine - Designed by Students C++ &OpenGL[编辑] 手机游戏引擎GledPlay - 一套完整的SDK用于开发手机游戏。game-editor - 为GP2X开发游戏的开发套件。[编辑] PSPWGAF - Guild Software用于开发Vendetta Online的引擎。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7172166.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-02
下一篇 2023-04-02

发表评论

登录后才能评论

评论列表(0条)

保存