Can't access MySQL On BitBucket Cloud

Jamie Bailey January 29, 2021

I'm using the `docker` service to perform a docker run command & I am also using the `mysql` service. I can seem to connect to the mysql service from within the docker container. I keep getting "connection refused" any help?

1 answer

1 accepted

0 votes
Answer accepted
ktomk
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
February 9, 2021

Hey @Jamie Bailey , welcome to the Atlassian Community.

No idea if I get you right here. So within your Pipeline Container (that is also a Docker container) you are running `docker run command-container ...` that should connect to the `mysql` service that is added to the pipeline step?

For illustration:

pipelines:
default:
- step:
image: ktomk/pipelines:busybox
script:
- docker run command-container ...
services:
- mysql
- docker

The pipeline container (ktomk/pipelines:busybox) can access the services (mysql) via localhost / 127.0.0.1.

This is either also possible for the command-container (use 127.0.0.1 for mysql as "localhost" can cause problems with Mysql) or not. I don't know.

In case it's not, it needs to find it's way through docker networking. So try with "127.0.0.1" and port "3306" first. If that is not possible the other option I know about (details) is to

If you need to communicate from a service running in docker to a service running in your build container, when starting the service provide it the following host entry using --add-host host.docker.internal:$BITBUCKET_DOCKER_HOST_INTERNAL you can then access the service using host.docker.internal:<port>.

this is not exactly your use-case but might give pointers on the networking layout. The post writes that using `--network=host` is not possible any longer, so for the `docker run` command it might still work to add the host hosts.docker.internal as outlined and then the mysql service could be available on host.docker.internal and port 3306. 

Jamie Bailey February 10, 2021

Hey @ktomk 

Forgot to update, I found the solution. So while inside the container I was trying to communicate with the MariaDB/MySQL server using 127.0.0.1 & localhost and this did not work.

To access the host network on BitBucket cloud from within a docker container I used 172.17.0.1

ktomk
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
February 10, 2021

`172.17.0.1` is the default docker-ip. It may change and then it breaks.

Better would be to do the suggested internal host resolution with the Bitbucket Pipelines environment variable:

docker run --add-host host.docker.internal:"$BITBUCKET_DOCKER_HOST_INTERNAL" ...

 and then use `host.docker.internal` instead of `172.17.0.1`.

You could also `echo "$BITBUCKET_DOCKER_HOST_INTERNAL"` in a pipeline script line to see what this standard variable contains.

Like Jamie Bailey likes this
Jamie Bailey February 10, 2021

@ktomk thank you for the help, that worked.

I did it slightly differently:

docker run --env DB_TEST_HOST=$BITBUCKET_DOCKER_HOST_INTERNAL ...

since our docker app uses this environment variable to access the MariaDB host

Like ktomk likes this
ktomk
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
February 10, 2021

Yes, exactly that way. Looks good to me. And great to read how it resolved.

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events