使用docker容器在Atlassian Bitbucket管道中进行测试

使用docker容器在Atlassian Bitbucket管道中进行测试,docker,amazon-dynamodb,bitbucket-pipelines,Docker,Amazon Dynamodb,Bitbucket Pipelines,我正在使用dynamodb docker容器在Atlassian Bitbucket管道中运行一些测试。这些步骤在本地使用相同的docker run命令工作,但由于某些原因,在管道中运行时,db容器启动后,我无法连接到db容器: image: python:3.6 pipelines: default: - step: caches: - docker script: - docker run -d -p 80

我正在使用dynamodb docker容器在Atlassian Bitbucket管道中运行一些测试。这些步骤在本地使用相同的docker run命令工作,但由于某些原因,在管道中运行时,db容器启动后,我无法连接到db容器:

image: python:3.6

pipelines:
  default:
    - step:
        caches:
          - docker
        script:
          - docker run -d -p 8000:8000 --name dynamodb --entrypoint java amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDb -inMemory
          - curl http://localhost:8000
        services:
          - docker
curl命令返回:

curl http://localhost:8000 % Total % Received % Xferd Average Speed
Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0
0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:-
-:-- 0curl: (56) Recv failure: Connection reset by peer 
我尝试使用localhost和dynamodb作为主机名,结果相同。我也在Atlassian社区发布了这篇文章,但没有得到答案。

您不应该手动启动amazon/dynamodb local,您应该使用:

您可能需要将容器和内存的大小增加一倍,因为DynamoDB非常重,但它也可以在默认情况下工作。

您不应该手动启动amazon/DynamoDB local,而是应该使用:


您可能需要将容器和内存的大小增加一倍,因为DynamoDB非常重,但它也可以在默认情况下工作。

正如您在docker run命令中看到的,我需要覆盖docker容器的入口点。在阅读Atlassian文档时,我找不到使用“服务”选项的方法。@rcdsystems。我懂了。最有可能的是,您需要使用-sharedDb。在服务中还不可能做到这一点,但是您可以使用预定义的AWS\u访问密钥\u ID、AWS\u机密密钥\u访问密钥和AWS\u默认区域,就像我的示例中那样,然后在测试中使用相同的方法。执行此操作时,您将访问相同的数据库。根据它们的:-sharedDb-如果您指定-sharedDb,DynamoDB将为每个凭证和区域使用单个数据库文件,而不是单独的文件。因此,只需使用您在docker run命令中看到的相同凭据和区域,我需要覆盖docker容器的入口点。在阅读Atlassian文档时,我找不到使用“服务”选项的方法。@rcdsystems。我懂了。最有可能的是,您需要使用-sharedDb。在服务中还不可能做到这一点,但是您可以使用预定义的AWS\u访问密钥\u ID、AWS\u机密密钥\u访问密钥和AWS\u默认区域,就像我的示例中那样,然后在测试中使用相同的方法。执行此操作时,您将访问相同的数据库。根据它们的:-sharedDb-如果您指定-sharedDb,DynamoDB将为每个凭证和区域使用单个数据库文件,而不是单独的文件。所以只需使用相同的凭证和区域
definitions:
  services:
    dynamodb-local:
      image: amazon/dynamodb-local
      memory: 2048
  pipelines:
    default:
      - step:
          image: python:3.6
          size: 2x
          services:
            - dynamodb-local
          script:
            - export DYNAMODB_LOCAL_URL=http://localhost:8000
            - export AWS_DEFAULT_REGION=us-east-1
            - export AWS_ACCESS_KEY_ID=''
            - export AWS_SECRET_ACCESS_KEY=''
            - aws --endpoint-url ${DYNAMODB_LOCAL_URL} dynamodb delete-table --table-name test || true
            - aws --endpoint-url ${DYNAMODB_LOCAL_URL} dynamodb create-table --cli-input-json file://test.table.json
            - python -m unittest test_module.TestClass