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

Post Docker-如何在启动后自动在REST容器上发布请求?,post,docker,docker-compose,dockerfile,Post,Docker,Docker Compose,Dockerfile,我有一个docker容器,它是由docker compose配置和启动的大型项目的一部分。该容器在启动时需要配置,方法是向其RESTAPI发送HTTP POST请求 基本上,我现在做的是运行docker compose up并等待一段时间,这样一切似乎都已经开始了,特别是给定的docker容器。然后我用curl命令发送我的HTTP帖子 是否有办法修改Dockerfile,以便它启动Docker容器,等待其restapi启动并发布给定的请求 我的问题是一般性的,但如果您需要更多详细信息,这里是我

我有一个docker容器,它是由
docker compose
配置和启动的大型项目的一部分。该容器在启动时需要配置,方法是向其RESTAPI发送HTTP POST请求

基本上,我现在做的是运行
docker compose up
并等待一段时间,这样一切似乎都已经开始了,特别是给定的docker容器。然后我用
curl
命令发送我的HTTP帖子

是否有办法修改
Dockerfile
,以便它启动Docker容器,等待其restapi启动并发布给定的请求


我的问题是一般性的,但如果您需要更多详细信息,这里是我当前非常简单的
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

您可以创建另一个容器,等待rabbitmq公开其RESTAPI,然后执行所需的操作(在您的情况下发送HTTP POST)

下面是docker compose文件的一个示例

连接:
构建:卡夫卡连接
链接:
-卡夫卡
端口:
- "8083:8083"
环境:
连接\u引导\u服务器:kafka:9092
CONNECT\U GROUP\U ID:CONNECT-cluster-A
连接初始化:
建造:
上下文:。
取决于:
-连接
链接:
-连接
命令:[“/wait it.sh”、“-t”、“300”、“connect:8083”、“--”、“/init.sh”]
这是init容器的Docker文件。您可以使用此文件

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

curl-X POST\
http://connect:8083/connectors \
-d'{“名称”:“我的项目”,“配置”:{“名称”:“我的项目”,“主题”:“我的主题”,“tasks.max”:2,“connector.class”:“the.package.to.my.connector.class”}”

Docker没有内置的等待/轮询机制。您可以将发送POST请求包装在一个脚本中,该脚本轮询API(
/status
或其他内容),并在API启动后立即发送请求。Docker 1.12介绍了可以对API进行轮询的指令。但在这种情况下,将其构建到API中会更容易。在再次阅读您的问题后:如果可以从容器中发送POST请求,那么可以选择
HEALTHCHECK
。但是,帖子请求将被发送多次(如果你不再用一些奇特的逻辑来包装它)@mgansler,谢谢你的评论。我还没有使用HEALTHCHECK,但我认为应该创建一个每隔一段时间启动一次的命令,以检查容器是否运行良好,并终止它或重新启动它。但我会朝这个方向调查。否则,我想创建一个自定义脚本,我可以在容器启动时启动,等待REST API响应,然后发布我的数据,但我不知道如何在容器的FROM映像的入口点同时启动这样一个脚本…因为这是很久以前的事了,我无法测试您的答案,但如果我没记错的话,我最终做了类似的事情(我确实使用了相同的wait for it bash脚本)。我刚刚遇到了这个问题,并在试图解决它时找到了您的问题。我用上面提到的方法修复了它。我知道您肯定不需要该解决方案,但我认为它可能会给其他用户带来好处。
FROM bash
RUN apk add --no-cache curl
ADD init.sh wait-for-it.sh /