Hsaura docker-compose文件返回错误-代码为0退出

时间:2020-07-25 00:45:26

标签: docker docker-compose hasura

这是docker compose文件。我唯一更改的是添加命令,以便hasura可以等到网站启动后再旋转图像。

version: "3.8"
services:
  graphql-engine:
    container_name: "prm_graphql_engine"
    image: hasura/graphql-engine:v1.3.0
    ports:
      - "8080:8080"
    command: >
      sh -c "
      until wget --spider host.docker.internal:8000; do
        >&2 echo 'Django is unavailable - sleeping'
        sleep 5
      done;
        echo 'Django is up'
      "
    depends_on:
      - "db"
      - "web"
    restart: always
    environment:
      HASURA_GRAPHQL_DATABASE_URL: postgres://$POSTGRES_USER:$POSTGRES_PASSWORD@db:5432/$POSTGRES_NAME
      HASURA_GRAPHQL_ENABLE_CONSOLE: "true" # set to "false" to disable console
      HASURA_GRAPHQL_ENABLED_LOG_TYPES: startup, http-log, webhook-log, websocket-log, query-log

当我运行docker-compose up verbose时,这是错误消息。

prm_graphql_engine exited with code 0
urllib3.connectionpool._make_request: http://localhost:None "POST /v1.38/containers/d3be369d69af7de6cd5dc84f0056dda49fce7f474b827e78e518144dca8e03d5/wait HTTP/1.1" 200 None
urllib3.connectionpool._make_request: http://localhost:None "GET /v1.38/containers/d3be369d69af7de6cd5dc84f0056dda49fce7f474b827e78e518144dca8e03d5/json HTTP/1.1" 200 None
compose.cli.verbose_proxy.proxy_callable: docker inspect_container -> {'AppArmorProfile': '',
 'Args': ['-c',
          ' until wget --spider host.docker.internal:8000; do\n'
          "  >&2 echo 'Django is unavailable - sleeping'\n"
          '  sleep 5\n'
          'done;\n'
          "  echo 'Django is up'\n"],
 'Config': {'AttachStderr': False,
            'AttachStdin': False,
            'AttachStdout': False,
...
compose.cli.verbose_proxy.proxy_callable: docker inspect_container <- ('d3be369d69af7de6cd5dc84f0056dda49fce7f474b827e78e518144dca8e03d5')

有什么我想念的吗?我确实需要等待另一个容器首先运行,但是我不明白为什么该命令会导致任何错误。

1 个答案:

答案 0 :(得分:1)

退出代码0成功(容易记住,所有非零退出代码=失败)。

看来这里发生的是command中的docker-compose.yaml覆盖了默认命令。并且您将命令设置为:

until wget --spider host.docker.internal:8000; do
        >&2 echo 'Django is unavailable - sleeping'
        sleep 5
done;
echo 'Django is up'

假设满足until条件,并且继续进行echo,则一旦完成,该命令将以退出代码0终止,然后结束容器进程(防止Hasura正在运行)。

如果您要执行启动前命令而不是覆盖容器的命令,我认为应该使用docker-entrypoint脚本。