Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 需要在容器启动时循环命令_Docker_Docker Compose - Fatal编程技术网

Docker 需要在容器启动时循环命令

Docker 需要在容器启动时循环命令,docker,docker-compose,Docker,Docker Compose,我正在尝试使用启动容器,但我希望已经使用设置的api密钥启动它。因此,我尝试使用另一个容器来使用命令行: version: '3.7' services: logseqcli: image: datalust/seqcli:5.1.251 command: apikey create --title='newapikey' --token='123456' --server=http://logseq depends_on: - logseq log

我正在尝试使用启动容器,但我希望已经使用设置的api密钥启动它。因此,我尝试使用另一个容器来使用命令行:

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容器完全启动之前执行了该命令,所以建议我创建一个循环来执行该命令。我试过这个:

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

但是这个命令甚至没有被识别。有一种正确的方法可以使用docker compose在容器上循环命令?

如果不覆盖docker入口点,就不能使用
/bin/bash
命令。这里有一个解决方法

docker compose

version: '3.7'

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

#!/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
dockerfile

FROM datalust/seqcli:5.1.251

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

COPY ./docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]


谢谢,这真的很有道理。但是我在bash中发现了一个错误:
docker-entrypoint.sh:语法错误:文件结尾意外(应为“do”)
您知道shell脚本有什么问题吗?您有完整的入口点吗?docker容器中的文件内容是什么?这是一个语法错误,现在循环工作了;its显示两次“服务不可用”消息,然后显示“服务已启动”消息,然后显示“/docker-entrypoint.sh:16:/docker-entrypoint.sh:seqcli:Permission denied”。即使我仅将bash命令设置为“seqcli help”,也会发生这种情况。我需要对shell脚本设置某种权限?您需要使用bash作为入口点,并使用长令牌