问题描述
This link 解释了如何在 Docker 上运行 Apache Drill。
docker run -i --name drill-1.18.0 -p 8047:8047 -t apache/drill:1.18.0 /bin/bash
我需要在 Docker Compose 上运行它,所以我设置了它:
version: "3.0"
services:
drill:
image: apache/drill:latest
ports:
- "8047:8047"
volumes:
- vol_dask_data:/data
entrypoint:
- /bin/bash
然后像这样开始:
docker-compose up -d
但是容器没有做任何事情就结束了,即使我用 -d
开始 docker compose。
如何在 Docker Compose 中启动 Drill?
解决方法
结尾
ENTRYPOINT /opt/drill/bin/drill-embedded
在 docker run
命令中,此特定结构完全忽略了图像名称后给出的命令。在您的 Compose 设置中,您将其(使用 entrypoint:
行)替换为 Bash shell,但此 shell 将立即退出。
docker run
命令和 Compose 设置之间的另一个重要区别是 -it
选项。如果您在没有 docker run
或 -i
的情况下尝试使用 -t
命令,您将看到 Drill 提示,然后容器将立即退出。如果您添加回 -i
则它将等待命令,并且在执行此操作时它将接受网络连接。与此等效的 Compose 是 stdin_open: true
命令。
通过这个 docker-compose.yml
,我可以在 http://localhost:8047
上看到 Drill UI:
version: "3.8" # a more current version
services:
drill:
image: apache/drill:latest
ports:
- "8047:8047"
stdin_open: true # add this line
# do not override entrypoint: or command:
# include volumes: if required