我想使用运行某些服务的自定义docker镜像,使用bitbucket管道来测试应用程序。我有一个dev docker映像,该映像运行我需要的所有服务才能通过测试。绑定正确的端口,以便测试通过。



我尝试在bitbucket-pipelines.yml中直接使用此容器,它是

docker run -it -p 3000:3000 -p 6379:6379 -p 8983:8983 my_dockerhub/image
./start_services.sh
bundle exec rspec
# everything passes


我在bundle exec rspec步骤中收到以下错误

image: 
  name: my_dockerhub/image
  username: $DOCKER_HUB_USERNAME
  password: $DOCKER_HUB_PASSWORD
  email: $DOCKER_HUB_EMAIL
  # bind ports here somehow?

pipelines:
  branches:
    '{master, develop, bitbucket_pipelines}':
      - step:
          name: Test
          script:
            - ./start_services.sh
            - sleep 30
            - bundle exec rspec



我尝试直接在bitbucket管道内运行docker容器

# Errno::ECONNREFUSED:
#   Connection refused - connect(2) for "127.0.0.1" port 8983


但是该步骤在docker run步骤冻结。
我认为这是因为我使用了-t标志,所以该命令不会退出。我本以为可以不用运行它就可以使用docker exec将命令发送到容器,但是如何检查测试是否通过?

评论

-t以防止容器退出?您在本地运行吗?

是的,它在本地运行良好。我在第二个示例中使用了-t标志,但是当我运行docker run -t -p 3000:3000 -p 6379:6379 -p 8983:8983 my_dockerhub / image
时,管道冻结
-t,--tty分配伪TTY

#1 楼

尝试使用-d detached标志运行

docker run -td -p 3000:3000 -p 6379:6379 -p 8983:8983 my_dockerhub/image # here ^
当用于运行容器的根进程退出时,以分离模式启动的容器退出。这将防止该步骤在docker run阶段冻结。

Docker docs -d标志

评论


谢谢,差不多了! Bitbucket管道不支持tty,因此我需要标准输入打开的分离模式。最终使它工作的是docker run -id -p 3000:3000 -p 6379:6379 -p 8983:8983 -v $ PWD:$ work_dir $ my_image

–con--
18年5月15日在9:36