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

The*_*xme 5 post docker dockerfile docker-compose

我有一个 docker 容器,它是由docker-compose. 该容器在启动时需要通过向其 REST API 发送 HTTP POST 请求进行配置。

基本上我现在所做的就是运行docker-compose up并等待一段时间,以便一切似乎都已开始,特别是给定的 docker 容器。然后我使用命令发送 HTTP POST curl

有没有办法修改,Dockerfile以便启动 Docker 容器,等待其 REST API 启动并发布给定的请求?


我的问题是一个通用问题,但如果您需要更多详细信息,这是我当前的非常简单的问题Dockerfile

FROM 1ambda/kafka-connect:latest
COPY my-project/target/*.jar $KAFKA_HOME/libs/
Run Code Online (Sandbox Code Playgroud)

以及相应的行docker-compose.yml

connect:
    build: kafka-connect
    links:
      - kafka
    ports:
      - "8083:8083"
    environment:
        CONNECT_BOOTSTRAP_SERVERS: kafka:9092
        CONNECT_GROUP_ID: connect-cluster-A
Run Code Online (Sandbox Code Playgroud)

最后,容器启动后我会执行 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
Run Code Online (Sandbox Code Playgroud)

sto*_*odi 4

您可以创建另一个容器,等待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"]
Run Code Online (Sandbox Code Playgroud)

这是 init 容器的 Docker 文件。您可以使用这个wait-for-it.sh文件

FROM bash
RUN apk add --no-cache curl
ADD init.sh wait-for-it.sh /
Run Code Online (Sandbox Code Playgroud)

init.sh 文件包含您的 HTTP POST(如果需要,您可以向此文件添加其他命令)

FROM bash
RUN apk add --no-cache curl
ADD init.sh wait-for-it.sh /
Run Code Online (Sandbox Code Playgroud)