首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CircleCI工作流期间,process从来不存在于Docker容器中

在CircleCI工作流期间,process从来不存在于Docker容器中
EN

Stack Overflow用户
提问于 2021-03-17 10:38:46
回答 1查看 318关注 0票数 0

我有一个看起来像这样的Dockerfile

代码语言:javascript
复制
FROM python:3.6

WORKDIR /app
ADD . /app/

# Install system requirements
RUN apt-get update && \
    xargs -a requirements_apt.txt apt-get install -y

# Install Python requirements
RUN python -m pip install --upgrade pip
RUN python -m pip install -r requirements_pip.txt

# Circle CI ignores entrypoints by default
ENTRYPOINT ["dostuff"]

我有一个CircleCI配置,它可以:

代码语言:javascript
复制
version: 2.1


orbs:
  aws-ecr: circleci/aws-ecr@6.15.3


jobs:
  benchmark_tests_dev:
    docker:
      - image: blah_blah_image:test_dev
        #auth
    steps:
      - checkout
      - run:
          name: Compile and run benchmarks
          command: make bench

workflows:
  workflow_test_and_deploy_dev:
    jobs:
      - aws-ecr/build-and-push-image:
          name: build_test_dev
          context: my_context
          account-url: AWS_ECR_ACCOUNT_URL
          region: AWS_REGION
          repo: my_repo
          aws-access-key-id: AWS_ACCESS_KEY_ID
          aws-secret-access-key: AWS_SECRET_ACCESS_KEY
          dockerfile: Dockerfile
          tag: test_dev
          filters:
            branches:
              only: my-test-branch
      - benchmark_tests_dev:
          requires: [build_test_dev]
          context: my_context
          filters:
            branches:
              only: my-test-branch
      - aws-ecr/build-and-push-image:
          name: deploy_dev
          requires: [benchmark_tests_dev]
          context: my_context
          account-url: AWS_ECR_ACCOUNT_URL
          region: AWS_REGION
          repo: my_repo
          aws-access-key-id: AWS_ACCESS_KEY_ID
          aws-secret-access-key: AWS_SECRET_ACCESS_KEY
          dockerfile: Dockerfile
          tag: test2
          filters:
            branches:
              only: my-test-branch

make bench看起来像:

代码语言:javascript
复制
bench:
        python tests/benchmarks/bench_1.py
        python tests/benchmarks/bench_2.py

这两种基准测试都遵循以下模式:

代码语言:javascript
复制
# imports

# define constants

# Define functions/classes

if __name__ == "__main__":
    # Run those tests

如果我在my-test-branch上本地构建我的Docker容器,重写入口点以进入它,然后在容器中运行make bench,这两个脚本都完美地执行和退出。

如果我提交到同一个分支并触发CircleCI工作流,则bench_1.py将运行,然后永不退出。我已经尝试过在make命令中切换Python脚本的顺序。在这种情况下,bench_2.py运行,然后永远不退出。我尝试过在两个脚本的sys.exit()块的末尾放置一个if __name__ == "__main__":,这并不会强制在CircleCI上退出。第一个要运行的脚本将运行到完成,因为我已经在整个脚本中放置了日志来跟踪进度。它从来没有离开过。

知道为什么这些脚本会在本地运行并退出容器,而不会在CircleCI上的容器中退出吗?

编辑

我刚意识到“永不退出”是我在做的一个假设。脚本有可能退出,但在那之后,CircleCI作业会悄然挂起?关键是脚本运行、完成,CircleCI作业继续运行,直到我得到10分钟的超时错误(Too long with no output (exceeded 10m0s): context deadline exceeded)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-18 16:17:35

原来我们使用的snowflake.connector Python存在问题,如果在打开的雪花连接期间发生错误,则连接没有正确关闭,并且进程挂起。还有另一个问题,在这个库中的某些错误正在被记录,而不是引发,导致第一个问题悄然发生。

我更新了雪花IO处理程序,为每次读取/执行显式地打开/关闭连接,这样就不会发生这种情况。现在,我的脚本在CircleCI上的容器中运行得很好。我仍然不知道为什么他们在本地而不是远程的容器中运行,但我将把这个留给开发人员神灵。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66671373

复制
相关文章

相似问题

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