【发布时间】: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