【问题标题】:Failed to deploy multi-container app to Heroku via Travis CI无法通过 Travis CI 将多容器应用程序部署到 Heroku
【发布时间】:2020-11-09 18:19:26
【问题描述】:

在过去的 2 天里,我一直在尝试通过 Travis CI 将我的多容器应用程序部署到 Heroku 的不同方法。当我从 Travis CI 部署我的应用程序时,Heroku 显示一个奇怪的错误。

这是我的

docker-compose.yml:

version: '3'

services:
  db:
    image: mysql:5.7
    ports:
      - '3306:3306'
    environment:
       MYSQL_DATABASE: 'mysql'
       MYSQL_USER: 'root'
       MYSQL_PASSWORD: 'root'
       MYSQL_ROOT_PASSWORD: 'root'
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/covid_analysis
    ports:
      - "8000:8000"
    depends_on:
      - db

使用此配置进行部署后,我的 Travis CI build 显示一个奇怪的错误:

经过一番谷歌搜索,我发现了一个关于这个问题的 GitHub issue,它建议使用入口点而不是 cmd/command 进行部署。

因此,我确实将我的command: python manage.py runserver 0.0.0.0:8000 更改为entrypoint: python manage.py runserver 0.0.0.0:8000

这一次,Travis build 错误如下:

这是我最新的docker-compose.ymlDockerfile 我用谷歌搜索了很多东西,但我找不到任何可以解决我的问题的东西(甚至无法解释为什么它不起作用)。 所有构建在本地都可以正常工作。代码可在GitHub 获得。

【问题讨论】:

    标签: docker heroku containers travis-ci heroku-cli


    【解决方案1】:

    您的错误来自您在 Travis CI 上调用 docker-compose run 的方式。

    在您的.travis.yml 中,可以找到以下内容:

    script:
    - docker-compose run web python manage.py test
    

    您的 docker-compose 在这里尝试做的是运行以下服务:

    • 网络
    • 蟒蛇
    • manage.py
    • 测试

    但是,您的 docker-compose 中存在的唯一服务是 web,因此命令失败。

    更新

    我原来的答案是错误的,我认为docker-compose run 的行为与docker-compose up 相似。

    docker-compose.yml中的web服务从command:重构为entrypoint:后出现错误是因为.travis.yml中的以下脚本:

    script:
    - docker-compose run web python manage.py test
    

    docker-compose run 的默认行为是它在指定服务之后传递所有参数(在这种情况下,python manage.py testweb 之后),作为对command 的覆盖。

    因为它现在被重构为entrypoint,所以这不再起作用了。这可以通过编写如下脚本来解决:

    script:
    - docker-compose run --entrypoint="python manage.py test" web
    

    【讨论】:

    • 您可能会注意到命令 docker-compose run web python manage.py test 在第一次构建中运行良好(在 docker-compose.yml 中使用了 command)。但在这种情况下它失败了。你觉得这里可以做什么?也许创建一个 build_script.sh 并添加 docker-compose run web python manage.py test
    • 我已为我的答案添加了更新。好像我原来的陈述错了。如果我更新的提案有效,请告诉我。
    • 该命令现在可以工作,但它会产生与第一次构建相同的错误:(travis-ci.com/github/mformihir/COVID-19-Predictive-Analysis/…) 我现在将尝试在 Travis 中更新 heroku CLI。另外,如果您认为这个问题有用,请点赞。
    猜你喜欢
    • 2019-01-26
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    • 2020-08-11
    • 2019-05-12
    • 2015-10-25
    相关资源
    最近更新 更多