Can't access MySQL On BitBucket Cloud
Asked by Jamie Bailey:

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?


Answers:
author: ktomk
body: Hey [@Jamie Bailey](/t5/user/viewprofilepage/user-id/4243117) , 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](https://community.atlassian.com/t5/Bitbucket-articles/Changes-to-make-your-containers-more-secure-on-Bitbucket/ba-p/998464)) 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.

comments: author: Jamie Bailey
body: Hey [@ktomk](/t5/user/viewprofilepage/user-id/3678912)   

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


author: ktomk
body: \`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.


author: Jamie Bailey
body: [@ktomk](/t5/user/viewprofilepage/user-id/3678912) 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  


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


Tags: bitbucket-pipelines

docker

mariadb

network