我正在尝试使用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镜像
我不能做的只是运行“docker-compose run cqlsh”,期望这可以构建客户端映像,启动服务器,等待并跳转到shell .
我确信缺乏码头构成知识是原因,有人在乎为这个新手提供一些提示吗? ;-)
谢谢奈杰尔 .
1 回答
我会回答我自己的新手问题
在给定上述定义的情况下,足以启动客户端和服务器,此外还需要将入口点行更改为
延长超时,也为包装器脚本本身启动sql解释器
实际上这也不起作用,因为cqlsh容器将退出,因为没有连接终端 . 使用docker-compose“run”命令似乎是一个更好的选择