我正在尝试使用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。为此,通过此Dockerfile调整基本cassandra映像:
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-compose run cqlsh”,期望这可以构建客户端映像,启动服务器,等待并跳转到shell。
我确信缺乏码头组合知识是原因,有人在乎为这个新手提供一些提示吗? ; - )
由于 佰。
答案 0 :(得分:0)
我会回答我自己的新手问题
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