【问题标题】:Curl command not working in load.sh in dockerfile卷曲命令在 dockerfile 的 load.sh 中不起作用
【发布时间】:2019-08-05 08:18:44
【问题描述】:

我有 docker 文件:

FROM anapsix/alpine-java:8_server-jre

RUN apk add --no-cache curl

COPY build/libs/codes-converter-1.0-SNAPSHOT.jar /tmp
COPY mappings.yaml /

ADD load.sh /

RUN chmod +x /load.sh

CMD ["/load.sh"]

加载.sh:

#!/bin/bash

exec java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=5005,suspend=n -jar tmp/codes-converter-1.0-SNAPSHOT.jar

sleep 10

curl http://localhost:8090/codes-converter/load-mappings

所以基本上,我需要在容器启动后连接到容器内我的 java 应用程序的一个端点。但我不知道该怎么做。我的错误在哪里?这个 curl 命令似乎不起作用。

【问题讨论】:

  • 你卡在exec java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=5005,suspend=n -jar tmp/codes-converter-1.0-SNAPSHOT.jar,你需要在命令末尾添加&
  • exec 用给定命令替换当前 shell。只需使用:java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=5005,suspend=n -jar tmp/codes-converter-1.0-SNAPSHOT.jar &
  • 即使删除 exec 并将其放到后台我猜也无济于事,容器需要此命令 java xxx 在前台运行以避免它退出。您需要将curl 与不在此容器中的其他部分分开,考虑修改您的设计。

标签: bash docker ubuntu dockerfile


【解决方案1】:

我猜你正在尝试做的是在容器启动后运行某种数据迁移。我建议在 API 上下文之外将它作为某种脚本运行,然后在迁移完成后才启动 API。

如果您仍然坚持以这种方式运行,我可以看到两种不同的方式:

  1. 在服务器启动之前将time.sleepcurl 守护进程(即使其在后台运行,等待服务器启动)
  2. 创建一个将与服务器进程并行执行的 cronjob

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-15
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    相关资源
    最近更新 更多