I'd like to test an application using bitbucket pipelines with a custom docker image running some services. I have a dev docker image which runs all the services I need in order for tests to pass.
docker run -it -p 3000:3000 -p 6379:6379 -p 8983:8983 my_dockerhub/image
./start_services.sh
bundle exec rspec
# everything passes
I can't seem to find a way to start the container with the right ports bound so the tests to pass.
I tried using the container directly using this in my bitbucket-pipelines.yml:
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
But I get the following error at the
bundle exec rspec
step# Errno::ECONNREFUSED: # Connection refused - connect(2) for "127.0.0.1" port 8983
I tried running the docker container directly within the bitbucket pipeline
pipelines: branches: '{master, develop, bitbucket_pipelines}': - step: name: Start Docker script: - docker login -u $DOCKER_HUB_USERNAME -p $DOCKER_HUB_PASSWORD - docker run -t -p 3000:3000 -p 6379:6379 -p 8983:8983 my_dockerhub/image - ./script/start_services.sh - sleep 20 - bundle exec rspec
But the step froze at the
docker run
step. I assume this is because I used the -t flag so the command doesn't exit. I was thinking I could possibly usedocker exec
to send commands to the container without running it but then how would I check the tests have passed?
-t
to prevent that the container exits? Did you run it locally?-t
flag in my second example, but the pipeline freezes when I rundocker run -t -p 3000:3000 -p 6379:6379 -p 8983:8983 my_dockerhub/image
-t, --tty Allocate a pseudo-TTY