【问题标题】:docker-compose exited with code 0 - convert docker run command to docker-compose up?docker-compose 以代码 0 退出 - 将 docker run 命令转换为 docker-compose up?
【发布时间】:2019-11-07 14:51:17
【问题描述】:

我正在尝试在 docker-compose 中添加 DBpedia Spotlight API 服务。 (https://github.com/dbpedia-spotlight/spotlight-docker)

通常,这个命令可以正常工作:

docker run -i -p 2222:80 dbpedia/spotlight-english spotlight.sh

我对 docker-compose.yml 的尝试:

version: '3'
services:
  dbpedia:
    image: "dbpedia/spotlight-english:latest"
    ports:
      - "2222:2222"

运行docker-compose up时出现以下错误:

Recreating composetest_dbpedia_1 ... done
Attaching to composetest_dbpedia_1
composetest_dbpedia_1 exited with code 0

我错过了什么?我正在尝试像以前一样启动 DBpedia 服务,但作为 docker-compose 文件的一部分

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    原始答案(检查更新):

    当你执行时

    docker run -i -p 2222:80 dbpedia/spotlight-english spotlight.sh
    

    您正在显式覆盖图像的默认入口点。

    要使用 docker-compose 实现相同的行为,请尝试使用以下 compose 文件:

    version: '3'
    services:
      dbpedia:
        image: "dbpedia/spotlight-english:latest"
        ports:
          - "2222:80"
        entrypoint: spotlight.sh
    

    您的端口映射有误,我已更正。

    Reference


    更新:正如 @David Maze 在 cmets 中正确说明的那样,使用您的 docker runcommand,您将覆盖图像的 CMD 指令,因此等效的 docker-compose 条目是 command: spotlight.sh。显然,对于您的图像而言,没有区别,但在某些情况下,CMDENTRYPOINT 操作对图像至关重要。

    【讨论】:

    • 这行得通,谢谢。事实上,我并没有阅读入口点 :) 感谢您的链接
    • 从技术上讲,您正在覆盖命令,Docker Compose command: 行是等效的。这在图像使用入口点进行首次设置然后运行命名命令的情况下尤其重要。