我在本地系统中创建了一个齐柏林飞艇码头工人映像,并通过 maven 存储库配置了 Spark 解释器并运行了齐柏林飞艇它工作了。但是当我停止 Docker 并再次运行时,解释器绑定消失了。如何解决这个问题?我希望该解释器绑定一次性,以便当我停止 docker 并再次运行时,它必须按原样存储这些解释器绑定。
您需要 3 个卷来持久化配置、笔记本和日志。
注意:如果添加了自定义解释器,则需要为解释器二进制文件增加一个卷。
docker volume create zeppelin-conf
docker volume create zeppelin-notebook
docker volume create zeppelin-logs
docker volume create zeppelin-interpreter
运行挂载上述卷的容器。
docker run -d --restart always -p 8080:8080 -v zeppelin-conf:/zeppelin/conf -v zeppelin-notebook:/zeppelin/notebook -v zeppelin-logs:/zeppelin/logs -v zeppelin-interpreter:/zeppelin/interpreter apache/zeppelin:0.8.1
如果只想保留配置,可以使用以下行:
docker volume create zeppelin-conf
docker run -d --restart always -p 8080:8080 -v zeppelin-conf:/zeppelin/conf apache/zeppelin:0.8.1
配置:/zeppelin/conf
笔记本:/zeppelin/notebook
日志:/zeppelin/logs
口译员:/zeppelin/interpreter
编辑:/zeppelin目录是 docker 镜像的默认主目录。请参阅 Dockerfile。因此,您无需指定ZEPPELIN_NOTEBOOK_DIR、ZEPPELIN_LOG_DIR或ZEPPELIN_INTERPRETER_DIR环境变量。
将文件挂载到 docker 运行中很容易 - 只需将其传递到 --volume 参数中即可。但是在齐柏林飞艇的情况下,那里预配置了一些参数,所以用空文件替换它很可能不是你想要实现的。因此,我可以建议首先从容器中获取具有默认内容的文件,然后在下次运行时挂载到该文件。请按照分步说明进行操作:
-
首先,我们为嵌套运行准备默认配置。
-
临时运行默认容器:
sudo docker run -d --name zeppelin-test apache/zeppelin:0.8.1
- 并从中获取默认配置:
mkdir -p conf sudo docker zeppelin-test cat /zeppelin/conf/interpreter.json > conf/interpreter.json
注1:它不会用于工作,因此大多数参数并不重要。只需完成一次即可设置!
注意 2:因为不幸的是,该配置在启动时填充,因此您无法在单次运行中获取它,例如:
sudo docker run --rm apache/zeppelin:0.8.1 cat /zeppelin/conf/interpreter.json
-
临时运行默认容器:
-
现在我们可以将其用作绑定挂载。
- 如果您使用直接 docker 运行方法而不使用 docker-compose,请添加选项,其中包括:
--volume $(pwd)/conf/interpreter.json:/zeppelin/conf/interpreter.json
-
但我建议使用 docker-compose,所以在
volumes:
键下放置了选项,例如- ./conf/interpreter.json:/zeppelin/conf/interpreter.json
.完整示例:version: '3.7' services: zeppelin: image: apache/zeppelin:0.8.1 ports: - "7077:7077" - "8080:8080" volumes: - ./logs:/logs - ./notebook:/notebook - ./conf/interpreter.json:/zeppelin/conf/interpreter.json environment: ZEPPELIN_NOTEBOOK_DIR: /notebook ZEPPELIN_LOG_DIR: /logs
然后从该目录运行:
docker-compose up -d
- 如果您使用直接 docker 运行方法而不使用 docker-compose,请添加选项,其中包括:
解释器绑定存储在conf/interpreter.json
中。需要使用外部interpreter.json
文件。