【问题标题】:docker-compose does not launchdocker-compose 不启动
【发布时间】:2017-01-12 22:42:54
【问题描述】:

我正在尝试使用 docker-compose 来启动 2 个图像 - 作为服务器运行的 Apache Cassandra - 另一个类似的容器,但运行 sql 解释器

我对 docker 很陌生,这是我迄今为止尝试过的:

这是我的 docker-compose.yml

version: '2'
services:
  cassandra-srv:
    image: cassandra:latest
    ports:
     - "7000:7000"
     - "7001:7001"
     - "9042:9042"
     - "7199:7199"
     - "9160:9160"
    container_name: cassandra-srv
  cqlsh:
    build: cassandra-build
    image: cassandra:mycqlsh
    links:
     - cassandra-srv
    container_name: cassandra-client
    depends_on:
     - cassandra-srv
    entrypoint:  /usr/local/bin/wait-for-it.sh cassandra-srv:9042 && cqlsh

这里的想法是我定义了两个服务。我为本地机器和其他 docker 映像打开了比需要更多的端口。服务器应该会启动,客户端在启动过程中会使用一个小工具脚本等待服务器完全启动,然后跳转到交互式 shell。为了做到这一点,基本的 cassandra 图像通过这个 Dockerfile 进行了调整:

FROM cassandra
MAINTAINER jonesn@uk.ibm.com
ENV container docker
WORKDIR /tmp

ADD https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh /usr/local/bin
RUN chmod +x /usr/local/bin/wait-for-it.sh

虽然我可以 * 启动 cassandra 镜像就好了 * 通过在 docker 调用上直接运行命令来启动相同的图像,但直接进入 cqlsh * 构建精致的docker镜像

我不能做的是简单地运行“docker-compose run cqlsh”,并期望它来构建客户端映像,启动服务器,等待,然后跳转到 shell。

我确定是缺乏 docker-compose 知识的原因,有人愿意为这个新手提供一些提示吗? ;-)

谢谢 奈杰尔。

【问题讨论】:

  • 只是出于好奇,为什么要在另一个容器中运行 cqlsh?

标签: docker cassandra docker-compose cqlsh


【解决方案1】:

我会回答我自己的新手问题

docker-compose up

根据上述定义足以启动客户端和服务器,另外需要将入口点行更改为

entrypoint:  /usr/local/bin/wait-for-it.sh -t 300 cassandra-srv:9042 -- cqlsh cassandra-srv 9042

延长超时时间,也让包装脚本本身启动 sql 解释器

事实上这也不起作用,因为 cqlsh 容器将退出,因为没有附加终端。使用 docker-compose "run" 命令似乎是一个更好的选择

docker-compose run cqlsh cqlsh localhost 9042

【讨论】: