Docker 需要在容器启动时循环命令
我正在尝试使用启动容器,但我希望已经使用设置的api密钥启动它。因此,我尝试使用另一个容器来使用命令行: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
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作为入口点,并使用长令牌