首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在亚马逊CodeBuild上运行docker-compose?

如何在亚马逊CodeBuild上运行docker-compose?
EN

Stack Overflow用户
提问于 2018-10-23 20:43:16
回答 2查看 14.4K关注 0票数 21

我正在尝试使用docker-compose在亚马逊网络服务CodeBuild上设置自动化的Rails测试,但它出错了。

在buildspec.yml中:

代码语言:javascript
复制
phases:
  build:
    commands:
        - docker-compose up -d

[Container] 2018/10/23 11:27:56 Running command docker-compose up -d
Couldn't connect to Docker daemon at http+docker://localhost - is it running?
 If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.
 [Container] 2018/10/23 11:27:56 Command did not exit successfully docker-compose up -d exit status 1
[Container] 2018/10/23 11:27:56 Running command echo This always runs even if the install command fails
This always runs even if the install command fails
 [Container] 2018/10/23 11:27:56 Phase complete: BUILD Success: false
[Container] 2018/10/23 11:27:56 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: docker-compose up -d. Reason: exit status 1

假设我需要安装docker并启动服务,但这将在Docker中运行Docker,并且需要以特权权限启动构建服务器。我只能看到构建Docker镜像的示例,但我只是尝试使用它来设置在其中运行测试的环境。

回答:在CodeBuild的Environment部分设置Docker镜像

感谢@mferre回答这个问题。Docker-compose实际上是完全支持的,不需要做任何特殊的事情。关键是在CodeBuild控制台内设置时,在“环境”部分选择一个Docker镜像(或通过应用编程接口):

或者也可以为现有项目指定-从Build / Build Projects中选择项目,然后从Edit菜单中选择Environment。这使您可以指定图像:

您可以在buildspec.yml中使用任何其他镜像和脚本来设置Docker,但最简单的方法是使用上面的官方Docker镜像。使用这个作为容器,docker和docker-compose是预先安装的,所以docker-compose“就行了”。如果项目的根目录中有一个docker-compose.yml文件,那么buildspec.yml可以像立即运行它一样简单:

代码语言:javascript
复制
version: 0.2
phases:
  build:
    commands:
      - docker-compose up -d
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-20 21:55:08

您是否将Docker运行时用于您的构建环境?

我正在使用这个存储库:https://github.com/mreferre/yelb

dockercompose并没有构建任何东西(它的目的是部署),但我相信您在此之前就遇到了问题。如果您使用Docker运行时,您的compose up应该可以工作。

这是我的构建规范的样子:

代码语言:javascript
复制
version: 0.2
phases:
  build:
    commands:
        - cd deployments/platformdeployment/Docker
        - docker-compose up -d

这是输出:

代码语言:javascript
复制
[Container] 2019/02/20 13:48:02 Waiting for agent ping 
[Container] 2019/02/20 13:48:04 Waiting for DOWNLOAD_SOURCE 
[Container] 2019/02/20 13:48:07 Phase is DOWNLOAD_SOURCE 
[Container] 2019/02/20 13:48:07 CODEBUILD_SRC_DIR=/codebuild/output/src292484508/src/github.com/mreferre/yelb 
[Container] 2019/02/20 13:48:07 YAML location is /codebuild/readonly/buildspec.yml 
[Container] 2019/02/20 13:48:07 Processing environment variables 
[Container] 2019/02/20 13:48:07 Moving to directory /codebuild/output/src292484508/src/github.com/mreferre/yelb 
[Container] 2019/02/20 13:48:07 Registering with agent 
[Container] 2019/02/20 13:48:07 Phases found in YAML: 1 
[Container] 2019/02/20 13:48:07  BUILD: 2 commands 
[Container] 2019/02/20 13:48:07 Phase complete: DOWNLOAD_SOURCE Success: true 
[Container] 2019/02/20 13:48:07 Phase context status code:  Message:  
[Container] 2019/02/20 13:48:07 Entering phase INSTALL 
[Container] 2019/02/20 13:48:07 Phase complete: INSTALL Success: true 
[Container] 2019/02/20 13:48:07 Phase context status code:  Message:  
[Container] 2019/02/20 13:48:08 Entering phase PRE_BUILD 
[Container] 2019/02/20 13:48:08 Phase complete: PRE_BUILD Success: true 
[Container] 2019/02/20 13:48:08 Phase context status code:  Message:  
[Container] 2019/02/20 13:48:08 Entering phase BUILD 
[Container] 2019/02/20 13:48:08 Running command cd deployments/platformdeployment/Docker 

[Container] 2019/02/20 13:48:08 Running command docker-compose up -d 
Creating network "docker_yelb-network" with driver "bridge" 
Pulling redis-server (redis:4.0.2)... 
4.0.2: Pulling from library/redis 
Pulling yelb-db (mreferre/yelb-db:0.3)... 
0.3: Pulling from mreferre/yelb-db 
Pulling yelb-appserver (mreferre/yelb-appserver:0.3)... 
0.3: Pulling from mreferre/yelb-appserver 
Pulling yelb-ui (mreferre/yelb-ui:0.3)... 
0.3: Pulling from mreferre/yelb-ui 
Creating docker_redis-server_1 ...  
Creating docker_yelb-db_1      ...  
·[2A·[2K 
Creating docker_redis-server_1 ... ·[32mdone·[0m 
·[2B·[1A·[2K 
Creating docker_yelb-db_1      ... ·[32mdone·[0m 
·[1BCreating docker_yelb-appserver_1 ...  
·[1A·[2K 
Creating docker_yelb-appserver_1 ... ·[32mdone·[0m 
·[1BCreating docker_yelb-ui_1        ...  
·[1A·[2K 
Creating docker_yelb-ui_1        ... ·[32mdone·[0m 
·[1B 
[Container] 2019/02/20 13:49:00 Phase complete: BUILD Success: true 
[Container] 2019/02/20 13:49:00 Phase context status code:  Message:  
[Container] 2019/02/20 13:49:00 Entering phase POST_BUILD 
[Container] 2019/02/20 13:49:00 Phase complete: POST_BUILD Success: true 
[Container] 2019/02/20 13:49:00 Phase context status code:  Message:  
票数 6
EN

Stack Overflow用户

发布于 2019-02-21 11:21:05

好了,我找到问题所在了!

您需要在CodeBuild容器上启用“特权访问”。这将允许您与docker cli进行交互。

然后将这两行添加到install命令中:

- nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay2& - timeout 15 sh -c "until docker info; do echo .; sleep 1; done" `

例如:

代码语言:javascript
复制
version: 0.2

phases:
  install:
    commands:
      - nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay2&
      - timeout 15 sh -c "until docker info; do echo .; sleep 1; done"
  pre_build:
    commands:
      - docker build -t helloworld .
  build:
    commands:
      - docker images
      - docker run helloworld echo "Hello, World!"
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52949413

复制
相关文章

相似问题

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