我有一个docker容器,它是由docker-compose
配置和启动的大项目的一部分。通过向其REST API发送HTTP POST请求,此容器在启动时需要进行配置。
基本上我现在所做的就是运行docker-compose up
并稍等一下,以便一切似乎已经开始,特别是给定的docker容器。然后我用curl
命令发送HTTP POST。
有没有办法修改Dockerfile
以便它将启动Docker容器,等待其REST API启动并POST一个给定的请求?
我的问题是通用问题,但如果您需要更多详情,请参阅我目前非常简单的Dockerfile
:
FROM 1ambda/kafka-connect:latest
COPY my-project/target/*.jar $KAFKA_HOME/libs/
docker-compose.yml
中的相应行:
connect:
build: kafka-connect
links:
- kafka
ports:
- "8083:8083"
environment:
CONNECT_BOOTSTRAP_SERVERS: kafka:9092
CONNECT_GROUP_ID: connect-cluster-A
最后,一旦容器启动,我就会执行HTTP POST:
curl -H "Content-Type: application/json" -X POST -d '
{
"name":"my-project",
"config" :
{
"name":"my-project",
"topics":"my-topic",
"tasks.max":2,
"connector.class":"the.package.to.my.connector.class"
}
}
' http://localhost:8083/connectors
答案 0 :(得分:1)
您可以创建另一个容器,等待Rabbitmq公开其REST API,然后执行所需的操作(在您的情况下发送HTTP POST)
以下是docker-compose文件的示例
connect:
build: kafka-connect
links:
- kafka
ports:
- "8083:8083"
environment:
CONNECT_BOOTSTRAP_SERVERS: kafka:9092
CONNECT_GROUP_ID: connect-cluster-A
connect-init:
build:
context: .
depends_on:
- connect
links:
- connect
command: ["/wait-for-it.sh", "-t", "300", "connect:8083", "--", "/init.sh"]
这是init容器的Docker文件。您可以使用此wait-for-it.sh文件
FROM bash
RUN apk add --no-cache curl
ADD init.sh wait-for-it.sh /
init.sh文件包含您的HTTP POST(如果需要,您可以向该文件添加其他命令)
curl -X POST \
http://connect:8083/connectors \
-d '{"name":"my-project","config":{"name":"my-project","topics":"my-topic","tasks.max":2,"connector.class":"the.package.to.my.connector.class"}}'