首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >容器启动时需要循环命令

容器启动时需要循环命令
EN

Stack Overflow用户
提问于 2020-02-29 21:15:25
回答 1查看 495关注 0票数 0

我正在尝试用Seq日志启动一个容器,但我希望已经用设置了api键的方法启动它。因此,我尝试使用另一个容器来使用命令行:

代码语言:javascript
复制
version: '3.7'

services:
  logseqcli:
    image: datalust/seqcli:5.1.251
    command: apikey create --title='newapikey' --token='123456' --server=http://logseq
    depends_on:
      - logseq
  logseq:
    image: datalust/seq:5.1
    environment:
      - ACCEPT_EULA=Y
    ports:
      - 2000:80
      - 4000:5341

我收到来自logseqcli容器的“连接拒绝”消息错误;Seq支持部门告诉我,这是因为logseqcli在logseq容器完全启动之前执行了命令,所以建议我创建一个循环来执行命令。我试过这个:

代码语言:javascript
复制
logseqcli:
    image: datalust/seqcli:5.1.251
    command: >
      /bin/bash -c "
        seqcli apikey create --title='newapikey' --token='123456' --server=http://logseq;
        while $$? != 0;
        do
          seqcli apikey create --title='newapikey' --token='123456' --server=http://logseq;
          sleep 1;
        done;"
    depends_on:
      - logseq

但是这个命令甚至没有被识别出来。有一种正确的方法可以在容器上循环命令并进行对接-组合?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-01 09:43:01

如果不覆盖码头入口点,就不能使用/bin/bash命令。有一种方法可以解决这个问题

码头工

代码语言:javascript
复制
version: '3.7'

services:
  logseqcli:
    build: .
    depends_on:
      - logseq
  logseq:
    image: datalust/seq:5.1
    environment:
      - ACCEPT_EULA=Y
    ports:
      - 2000:80
      - 4000:5341

entry_point

代码语言:javascript
复制
#!/bin/bash -e

SERVICE="http://logseq"

until curl -fs $SERVICE  > /dev/null; do
  >&2 echo "$SERVICE is unavailable - sleeping"
  sleep 2
done
>&2 echo "$SERVICE is up"

exec /bin/seqcli/seqcli apikey create --title='newapikey' --token='1kjdhfsdldkfa093482092823456' --server=$SERVICE

exit 0

码头文件

代码语言:javascript
复制
FROM datalust/seqcli:5.1.251

RUN apt-get update && apt-get install -y curl

COPY ./docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60469674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档