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?
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.
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
`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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
@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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Yes, exactly that way. Looks good to me. And great to read how it resolved.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.