0

在将 docker compose 与 prestosql 映像一起使用时,我遇到了一个特殊问题。

如果我将 compose 配置为将卷挂载到映像中的现有目录,则当容器启动时,与挂载点位于同一控制杆中的所有文件都会消失。父目录中的所有其他文件都消失了,只剩下挂载点(里面有正确的卷内容)

我的 docker-compose.yml 如下:

version: '2.2'
services:
  prestosql:
    image: prestosql/presto:329
    volumes:
       - ./src/test/resources/presto/catalog/:/usr/lib/presto/etc/catalog/

如果我在 prestosql 容器中执行 bash 并 ls/usr/lib/presto/etc/我得到:

[presto@7df706ccb1bc presto]$ ls -lah /usr/lib/presto/etc/
total 8.0K
drwxr-xr-x 3 root   root   4.0K Jan 30 15:12 .
drwxr-xr-x 1 presto presto 4.0K Jan 30 15:12 ..
drwxr-xr-x 4 presto presto  128 Jan 25 18:09 catalog

但是,如果我在没有卷配置的情况下重复该过程并且 ls/usr/lib/presto/etc/我得到:

[presto@7b2c2178f6e9 /]$ ls -lah /usr/lib/presto/etc/
total 28K
drwxr-xr-x 3 presto presto 4.0K Jan 23 12:22 .
drwxr-xr-x 3 presto presto 4.0K Jan 23 12:22 ..
drwxr-xr-x 2 presto presto 4.0K Jan 23 12:22 catalog
-rw-r--r-- 1 presto presto  178 Jan 23 12:22 config.properties
-rw-r--r-- 1 presto presto  295 Jan 23 12:22 jvm.config
-rw-r--r-- 1 presto presto   57 Jan 23 12:22 log.properties
-rw-r--r-- 1 presto presto   85 Jan 23 12:22 node.properties

在容器上运行检查仅显示挂载上的卷:

❯ docker inspect -f '{{ .Mounts }}' 7df706ccb1bc
[{bind  /blablabla/src/test/resources/presto/catalog /usr/lib/presto/etc/catalog  rw true rprivate}]

这是预期的行为吗?

4

2 回答 2

2

似乎 presto 映像本身不包含/usr/lib/presto/etc/目录,但是当容器启动入口点(run-presto)时,会/usr/lib/presto/default/etc/usr/lib/presto/etc这种方式创建一个符号链接:

if [[ ! -d /usr/lib/presto/etc ]]; then
  if [[ -d /etc/presto ]]; then
    ln -s /etc/presto /usr/lib/presto/etc
  else
    ln -s /usr/lib/presto/default/etc /usr/lib/presto/etc
  fi 
fi

因此,基本上,如果您将文件挂载在/usr/lib/presto/etc此链接下的任何位置,则不会创建,因此您最终会在该目录层次结构下拥有一个文件。

解决方案非常简单,只需将文件挂载到/usr/lib/presto/default/etc

...
volumes:
   - ./src/test/resources/presto/catalog/:/usr/lib/presto/default/etc/catalog/

正如一些附加说明:根据他们的文档:

配置应安装到 /etc/presto 或 /usr/lib/presto/etc(后者优先)。如果这些都不存在,则将使用默认的单节点配置。

似乎他们希望整个配置(即 etc 下的所有内容)应作为一个整体安装到 /etc/presto 或 /usr/lib/presto/etc,因此他们不希望添加/替换单个文件为什么你的方法没有按照你想要的方式工作。

于 2020-02-27T09:38:20.113 回答
-1

这是预期的行为吗?

本身可能不是“预期的”,但是是的,这种行为是设计使然:

https://github.com/moby/moby/issues/4361

于 2020-01-30T16:26:20.180 回答