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

rcd*_*ems 1 amazon-dynamodb docker bitbucket-pipelines

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

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
Run Code Online (Sandbox Code Playgroud)

卷曲命令返回:

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 
Run Code Online (Sandbox Code Playgroud)

我尝试使用 localhost 和 dynamodb 作为主机名,但结果相同。我也在 Atlassian 社区上发布了此问题,但没有得到答案。

mad*_*ead 5

您不应该amazon/dynamodb-local手动启动,而应该使用服务

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
Run Code Online (Sandbox Code Playgroud)

您可能需要将容器和内存的大小加倍,因为 DynamoDB 相当重(但它也可能在默认情况下工作)。