Docker - 如何在启动后自动在REST容器上发布请求?

时间:2016-08-12 08:28:40

标签: post docker docker-compose dockerfile

我有一个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

1 个答案:

答案 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"}}'