在黑群晖里面折腾 Docker 遇到一个比较棘手的问题,Google 了几个月没找到方法。
下载了几个 image 镜像:
root@HP-Gen8-DSM:~# docker images 3REPOSITORY TAG IMAGE ID CREATED SIZE atlassian/confluence-server 6.13.0 7b1705b3ff8f 2 weeks ago 981MB dpage/pgadmin4 3.6 885166b71c10 3 weeks ago 262MB postgres 9.6.9 106bdfb062df 4 months ago 235MB
但是不知道对应镜像目录是哪个:
root@HP-Gen8-DSM:/volume1/@docker/btrfs/subvolumes# ll total 0 drwx------ 1 root root 6430 Dec 17 20:17 . drwx------ 1 root root 20 Dec 17 14:27 .. drwxr-xr-x 1 root root 184 Dec 17 18:18 0177d981c89a9749c2723da2b23c798b49a8aa957f57ede4ab0d262c086d0cd6 drwxr-xr-x 1 root root 170 Dec 17 19:24 0819c021ac86443a7c23530ca8a3c9506a62dad6a81c5d2907649adc8bd0f6f3 drwxr-xr-x 1 root root 170 Dec 17 19:24 0819c021ac86443a7c23530ca8a3c9506a62dad6a81c5d2907649adc8bd0f6f3-init drwxr-xr-x 1 root root 124 Dec 17 18:19 08329ceddaa61aabcf84cfbe892b5f13fab4cfcfbc9c8b77355ba05c050d8ddd drwxr-xr-x 1 root root 108 Dec 17 18:19 0a10c5bb87be69ffb744fc3dbd4a876bb886d14100119bc3fa0422b96a9a0974 drwxr-xr-x 1 root root 132 Dec 17 18:18 0aa85aa90f65339fa122a63aae7c28d9dbe62829474b4188110500c855ff1d3f drwxr-xr-x 1 root root 184 Dec 17 18:18 1cc56e0e088fc8a0a40f4006bc622e1c2edcde6fe09a33bfd9d896a766ac1da9 drwxr-xr-x 1 root root 108 Dec 17 18:19 2328a6636b1a0b955999fea881f29ed5546b0c22d82198da8f6f32702fcbd1e5 drwxr-xr-x 1 root root 108 Dec 17 18:19 2557e744b7f04ca112373459f9f2d1b0d0a60bce009948ee52533ab96f1e6b4e drwxr-xr-x 1 root root 124 Dec 17 18:19 3191de7e4bae4ca1c7ba399b7c7ce1841afce9df0eaadb1bd11246a150a3bc0b drwxr-xr-x 1 root root 132 Dec 17 18:15 3275e20a52b655413cde6868cce47c5b2efd82ae6115e38a42c03de7e9c26b8d drwxr-xr-x 1 root root 132 Dec 17 18:15 33ed864d32cc848ceee12bcb072b27de12d2f6d3e830c6e447cb12f02376dfae drwxr-xr-x 1 root root 124 Dec 17 18:19 396b7b1f3c551e8870b8bd0627c44187106c9755fc7a8637aa23d6b9694ff55b drwxr-xr-x 1 root root 132 Dec 17 18:15 536f5f50d92f6729d0f9909b69e6080844ac57f7b29b35386e18ef631442534a drwxr-xr-x 1 root root 108 Dec 17 18:19 53c71f045525ca35f849f5f1f43bee9dffc0d048fc8612b13571dd762b84b1c4 drwxr-xr-x 1 root root 184 Dec 17 18:18 5f279b09c8a3a836cf920d1b542001173841b9dd731b6285f61d823b7fc22c95 drwxr-xr-x 1 root root 108 Dec 17 18:19 632e988754fec38d40a864fbf961988e6cd2a70bded7d8db9a270d4dddaf827e drwxr-xr-x 1 root root 132 Dec 17 18:15 6c9715a622c2984785a8af71b8c7d9a2dc14094d4b7027423a1247e9d0820256 drwxr-xr-x 1 root root 108 Dec 17 18:19 6f599819bc0890c39a8a93e890b5c1a82504feabd2bfa17ee3affd8ea98a21ab drwxr-xr-x 1 root root 184 Dec 17 18:18 767d6c74de2be179f730ff040c7974a83554469cf43bb1ca38cd0b59ee0e456d drwxr-xr-x 1 root root 158 Dec 17 18:16 7bf9e07cf56314b6040fed57320f6b258f0a4b4e77b4be3d23ace0f7ef3988d4 drwxr-xr-x 1 root root 124 Dec 17 18:19 80e5e45b4318224cf527e1b9937e4485c58ac0ff2bd9dbf84e97cb561809b12a drwxr-xr-x 1 root root 132 Dec 17 18:18 82511c81640e1129dca589432173d1b9a13d2f31aad6419622aaba0db6f7273c drwxr-xr-x 1 root root 158 Dec 17 18:15 8573f1b901ac4984a430398275876b667c271e82572c8f6f41f3a31ce012cedf drwxr-xr-x 1 root root 132 Dec 17 18:18 8da80ee80af713be3007515384073776acad7dd3580627ee61aed96989dacfd4 drwxr-xr-x 1 root root 132 Dec 17 18:18 a7c9bb64e258f62ced431a2c648df40c475f4cd839189a19f21fb61b0d21b3e6 drwxr-xr-x 1 root root 132 Dec 17 18:15 aaa7ef3c77e09c89776ccbf61019660fbbdd01183489b24b89b95503e06dc1f5 drwxr-xr-x 1 root root 108 Dec 17 18:19 ad5a0ee34c849bde85ea518ea9c487e6a2d1fcd3694c77ea5afdadb593650616 drwxr-xr-x 1 root root 124 Dec 17 18:19 afa47768b6f54d4fac2214a86f928609f8cf8fac1ee904a17c80daa54047d98f drwxr-xr-x 1 root root 132 Dec 17 18:15 b00f1c4c4d5143b7a57043d3a1e3ae76b374bedb564e3c2bf761360f83abe961 drwxr-xr-x 1 root root 184 Dec 17 18:18 b0d329b4f38a524f4816a51ccd4214f484c829984acd6df96a52aced60c825b1 drwxr-xr-x 1 root root 124 Dec 17 18:19 b3a5eed179c10ca31e7b9cd450fd2bdcc19b250f10eaadf6b8f3d4e86e72e64a drwxr-xr-x 1 root root 184 Dec 17 18:18 be0c6e6bc457624601898ba4a9ca7526c3a09727471370c6d7d1767b84c6fa14 drwxr-xr-x 1 root root 184 Dec 17 18:18 c3a8a4ed911ac251f316c62c43aea2439601dfc405cbf8ce5e9384a0d2980506 drwxr-xr-x 1 root root 224 Dec 17 18:18 ceb87bb0139f94cdfde3b368875fab2e8321f6d61fca468f7c50022ed6d32e57 drwxr-xr-x 1 root root 124 Dec 17 18:19 d074f013df36ebcebf09244d52ee6efde76880aea7f8ad3d6a8f7de4a515a94f drwxr-xr-x 1 root root 244 Dec 17 19:23 d6faeada9ab6282809df310f152c3e9589a1ddb0166cbde07c5446c27e5945f4 drwxr-xr-x 1 root root 244 Dec 17 19:23 d6faeada9ab6282809df310f152c3e9589a1ddb0166cbde07c5446c27e5945f4-init drwxr-xr-x 1 root root 124 Dec 17 18:19 d8b3b09628c9055d36277662fd1ea98170310d180304f4a02f2ae0b486623b0e drwxr-xr-x 1 root root 124 Dec 17 18:19 d9dcb1b9c48fc9a70f371ba508dc76d4d0e664fd3cf53ebc26d981db8e044697 drwxr-xr-x 1 root root 132 Dec 17 18:15 da97952a5e2a77adf0fb34540a6509b5fbe7f98b02e060b40342fb7dd6ecb15e drwxr-xr-x 1 root root 132 Dec 17 18:18 e6be116618a839f751c9a91275b37f68ee94175ec71ed76d9892332fd898fc3d drwxr-xr-x 1 root root 132 Dec 17 18:15 e84657e39df5b998ba5389813c583d7ea617e34cb06364b15fcd306421c44292 drwxr-xr-x 1 root root 158 Dec 17 18:15 ea658bb2aa6f75cf7c484ad8e384a1da9cb04f4c2e6c9dbbef672bd52417c62e drwxr-xr-x 1 root root 132 Dec 17 18:15 f3797551e573ed255bf373f9cf9d283adf431d807f5c87303a2789fe487540cf drwxr-xr-x 1 root root 178 Dec 17 19:21 f592ff402f4dbf6ac0f70bbb6167d089ffdc908a67f471acbfb99a592be4bbae drwxr-xr-x 1 root root 178 Dec 17 19:21 f592ff402f4dbf6ac0f70bbb6167d089ffdc908a67f471acbfb99a592be4bbae-init drwxr-xr-x 1 root root 124 Dec 17 18:19 f832bc4d54209fe5e3ff50cdbe6644ef98a8587fbbc971ef8d310c6bd111fcb2 drwxr-xr-x 1 root root 132 Dec 17 18:18 fcc271a7ea6ba4dd3ea35a2134738b8938f23f9d7cf39d97ed3e9a64a3f1d57d drwxr-xr-x 1 root root 150 Dec 17 18:19 fd5c40d5c4cc7a0bd1e14cd7505e59b2014fcc63e20074e85f725ed5342104a3
现在的办法是手动一个个去点击打开目录或者通过 df 查看目录占用大小来判断是不是想要的镜像。这也太蠢了吧。
另外,我只知道如果运行了某个镜像的容器,会生成一个同名 - init 的新映像目录。
希望有熟悉 Docker 的朋友可以告诉我确认镜像目录更好的办法。
![]() | 1 shakespaces 2018-12-18 14:22:12 +08:00 via Android 借楼问一下,我群晖 docker 总遇到映射文件夹在容器中没有权限的问题,有没有人遇到同样的情况及解决方法 |
2 Herobs 2018-12-18 14:22:39 +08:00 via Android inspect 有详细信息 |
![]() | 3 DearTanker OP @Herobs #2 通过这个查询到 ``` root@HP-Gen8-DSM:/volume1/@docker/btrfs/subvolumes# docker inspect 7b1705b3ff8f [ { "Id": "sha256:7b1705b3ff8f3a810336dc31e63793a73aea5874ef7daf38ee168a85cc246642", "RepoTags": [ "atlassian/confluence-server:6.13.0" ], "RepoDigests": [ "atlassian/confluence-server@sha256:2d8381cb668b4f49c4f88ae8039d79b9864c48653e4277667a6030cb0bb7a518" ], "Parent": "", "Comment": "", "Created": "2018-12-04T03:18:14.922379922Z", "Container": "71dc6d675ea4e69dd3e8e24351d3677f3f1f39f947ba4ddb500fc24cf75cbd54", "ContainerConfig": { "Hostname": "", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "ExposedPorts": { "8090/tcp": {}, "8091/tcp": {} }, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "JAVA_VERSION=jdk8u192-b12", "JAVA_HOME=/opt/java/openjdk", "JAVA_TOOL_OPTIOnS=-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap", "RUN_USER=daemon", "RUN_GROUP=daemon", "CONFLUENCE_HOME=/var/atlassian/application-data/confluence", "CONFLUENCE_INSTALL_DIR=/opt/atlassian/confluence" ], "Cmd": [ "|2", "CONFLUENCE_VERSION=6.13.0", "DOWNLOAD_URL=http://www.atlassian.com/software/confluence/downloads/binary/atlassian-confluence-6.13.0.tar.gz", "/bin/sh", "-c", "mkdir -p ${CONFLUENCE_INSTALL_DIR} && curl -L --silent ${DOWNLOAD_URL} | tar -xz --strip-compOnents=1 -C \"$CONFLUENCE_INSTALL_DIR\" && chown -R ${RUN_USER}:${RUN_GROUP} ${CONFLUENCE_INSTALL_DIR}/ && sed -i -e 's/-Xms\\([0-9]\\+[kmg]\\) -Xmx\\([0-9]\\+[kmg]\\)/-Xms\\${JVM_MINIMUM_MEMORY:=\\1} -Xmx\\${JVM_MAXIMUM_MEMORY:=\\2} \\${JVM_SUPPORT_RECOMMENDED_ARGS} -Dconfluence.home=\\${CONFLUENCE_HOME}/g' ${CONFLUENCE_INSTALL_DIR}/bin/setenv.sh && sed -i -e 's/port=\"8090\"/port=\"8090\" secure=\"${catalinaConnectorSecure}\" scheme=\"${catalinaConnectorScheme}\" proxyName=\"${catalinaConnectorProxyName}\" proxyPort=\"${catalinaConnectorProxyPort}\"/' ${CONFLUENCE_INSTALL_DIR}/conf/server.xml && sed -i -e 's/Context path=\"\"/Context path=\"${catalinaContextPath}\"/' ${CONFLUENCE_INSTALL_DIR}/conf/server.xml" ], "ArgsEscaped": true, "Image": "sha256:2618ff728742a424e1f68775038e202da647c73ee711afe088204ae336374e36", "Volumes": { "/var/atlassian/application-data/confluence": {} }, "WorkingDir": "/var/atlassian/application-data/confluence", "Entrypoint": null, "OnBuild": null, "Labels": null, "DDSM": false }, "DockerVersion": "18.03.1-ee-3", "Author": "Atlassian Confluence", "Config": { "Hostname": "", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "ExposedPorts": { "8090/tcp": {}, "8091/tcp": {} }, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "JAVA_VERSION=jdk8u192-b12", "JAVA_HOME=/opt/java/openjdk", "JAVA_TOOL_OPTIOnS=-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap", "RUN_USER=daemon", "RUN_GROUP=daemon", "CONFLUENCE_HOME=/var/atlassian/application-data/confluence", "CONFLUENCE_INSTALL_DIR=/opt/atlassian/confluence" ], "Cmd": [ "/entrypoint.sh", "-fg" ], "ArgsEscaped": true, "Image": "sha256:2618ff728742a424e1f68775038e202da647c73ee711afe088204ae336374e36", "Volumes": { "/var/atlassian/application-data/confluence": {} }, "WorkingDir": "/var/atlassian/application-data/confluence", "Entrypoint": [ "/sbin/tini", "--" ], "OnBuild": null, "Labels": null, "DDSM": false }, "Architecture": "amd64", "Os": "linux", "Size": 981016296, "VirtualSize": 981016296, "GraphDriver" { "Data": null, "Name": "btrfs" }, "RootFS": { "Type": "layers", "Layers": [ "sha256:bc7f4b25d0ae3524466891c41cefc7c6833c533e00ba80f8063c68da9a8b65fe", "sha256:a768c3f3878e96565d2bf0dcf90508261862847b2e7b8fc804a0770c07f0d5d5", "sha256:ca2991e4676cba899ad9bc6ad3a044cd0816915f9e97a6f2e67b6accbc779ba5", "sha256:b9b7103af585bd8ae9130de947817be7ce76092aa19cf6d2f9d5290440c645eb", "sha256:4508b8a3648cf718b2357b9054f11a8167d855fb4025db5bed5e52befd93e905", "sha256:695236666fc1fcb847e1a02d6be963e676c0435e6f009848efe41b559111e601", "sha256:84ef2929790df85724c82ff18c2b2e4b85e50703c6ee37915662df37620b9a57", "sha256:74434a3cc76f134bc962e5e8c80fd3a82b6ec62c350ded6b92ec1aaefbfc7b48", "sha256:35efee10212a591352472e2b60cfaaeb0e16362aab024df732ac8310c3c421d5", "sha256:fd61b63656abea55b7b3c35f12035f99f07701285eb8476d778de48f4351ce3d", "sha256:f77b89f2feccffdc376556e7c74beaabc55f816f94bfa196925fbac184be2feb", "sha256:1f694c4c9c8a00b1ca5a37c1204b744e893154e7d6781b93b2bfb91a3888321b" ] } } ] ``` 可是似乎还是没办法知道在 /volume1/@docker/btrfs/subvolumes 中对应的是哪个目录呀。 |
![]() | 4 DearTanker OP @shakespaces #1 是不是得开启那个“使用高权限执行容器”? |
![]() | 5 houzhimeng 2018-12-18 14:41:30 +08:00 "Cmd": [ "php-fpm" ], "ArgsEscaped": true, "Image": "php:7.2-fpm", "Volumes": null, "WorkingDir": "/var/www/html", "Entrypoint": [ "docker-php-entrypoint" ], "OnBuild": null, "Labels": {} }, |
![]() | 6 DearTanker OP @houzhimeng #5 不是这个目录,是为了找镜像本身放在哪个目录,不是镜像里面的工作目录。 |
7 CallMeReznov 2018-12-18 16:56:44 +08:00 |
![]() | 8 DearTanker OP @CallMeReznov #7 这个我在 3 楼回复了,貌似找不到的。 |
![]() | 9 alex321 2018-12-18 17:02:12 +08:00 话说,你一定要找到镜像本身放在本地的哪个目录做啥子呢。这个是 docker 自己维护的,它管理着由多个 layer 组成的一个镜像。我猜测可能一个 layer 就是一个文件,然后有个类似配置的 layer 做了原本 dockerfile 的转译,启动时使用转译的这个 layer 来把组成的多个 layer 拼合起来构成一个指定的运行的容器环境。 PS,我不是程序员,仅仅是爱好折腾,不求弄明白各种底层原理,但求能干什么或者怎么干。求不黑。 |
![]() | 10 tomczhen 2018-12-18 17:18:58 +08:00 via Android 镜像有导出 /导入命令,没必要去找物理路径。 权限是认 id 不是用户名,处理一下就行。 推荐 Portainer。 |
![]() | 11 wzxjohn 2018-12-18 18:05:44 +08:00 镜像本身是分层存储的,没有所谓的一个镜像对应一个目录吧。。。为啥要找这个呢? |
![]() | 12 DearTanker OP |
13 cccssss 2018-12-18 18:24:14 +08:00 @DearTanker 替换文件修改文件不是一般都用 Dockerfile 搞定,然后自己再 save 一个出来或者 push 重新发布一下? 还是我理解的你替换文件是直接修改像 9 楼说的 layer 二进制文件啥的? |
![]() | 14 wbrobot 2018-12-18 18:27:21 +08:00 docker exec -it 容器 /bin/bash 进容器里面拷出来 |
![]() | 15 yufz 2018-12-18 18:32:01 +08:00 via Android @DearTanker #12 替换修改文件你应该 run 一个容器出来,改完之后 docker commit 产生一个新镜像 |
![]() | 16 DearTanker OP @jinyang656 #15 学习了。 |
![]() | 17 wzxjohn 2018-12-18 19:25:49 +08:00 @DearTanker 木有修改镜像本身这种玩法的。如果你想做自己的镜像,就去搞 docker file build 一个出来。如果你只是想要修改镜像 run 出来的容器里面的内容的话,直接用这个镜像起一个新的容器,然后 ssh 进去随便搞就可以啦 |
![]() | 18 1daydayde 2018-12-18 19:41:50 +08:00 一个最简单的方法是挂载一个目录用 #14 的方法拷出来,然后运行的时候再把这个目录挂上。(好吧,也不简单,手动狗头 |
![]() | 19 GuryYu 2018-12-18 20:48:26 +08:00 via iPhone @DearTanker 要复制替换容器内文件直接 docker cp 命令不就可以了吗 |
![]() | 20 leopku 2018-12-18 23:05:42 +08:00 via iPhone ![]() @shakespaces 给目录加上 everyone 所有权限 |
![]() | 21 shakespaces 2018-12-19 12:27:45 +08:00 via Android @leopku 谢谢,成功了 |
![]() | 22 shakespaces 2018-12-19 12:28:19 +08:00 via Android @DearTanker 我之前试过没有用,现在用了 20 楼的方法就好了 |
![]() | 23 maleclub 2018-12-27 19:54:36 +08:00 @shakespaces 同问题,已解决。chmod 777 目标目标文件夹即可。 |