How to link docker containers? - docker

I have tried linking my docker containers but it seems to give error on access.
My structure is as following:
Database docker(Mysql) - Container name is um-mysql
Back-end docker(Tomcat) - Image name is cz-um-app
Front-end docker(Nginx) - Image name is cz-um-frontend
Linking of Back-end with Database docker is done as following and it works perfectly:
$ docker run -p 8080:8080 --name backendservices --link um-mysql:um-mysql cz-um-app
The linking of Front-end with Back-end is done as following:
$ docker run -p 80:80 --name frontend --link backendservices:backendservices cz-um-frontend
But, linking of Front-end with Back-end is not working.
I have a login page, on submit, it accesses a url http://backendservices:8080/MyApp
In console, it shows error as:
net::ERR_NAME_NOT_RESOLVED
Not sure why linking of back-end container with database works fine and not the same case of front-end with back-end. Do I need to configure some settings in Nginx for this?
The hosts entry is as following and I am able to ping backendservices too:

First you don't need to map 8080:8080 for backendservices: any EXPOSEd port in backendservices image is visible by any other container linked to it. No host port mapping needed.
Secondly, you can check in your front end if the backend has been register:
docker exec -it frontend bash
cat /etc/hosts
If it is not, check docker ps -a to see if backend is still runnong.

Related

Persist data in db2 LuW Docker Container

I'm running a docker container of a db/2 luw image (custom image of a DB2ExpressC on RHEL). The container exposes the service to port 50000 and is available from the "outside". The user is db2inst1 and seems to be a standard username for the database.
I start the container with the following command:
docker run --rm -itd -e DB2INST1_PASSWORD=kvl -e DBNAME=BLA -p 50000:50000 -v db2luw:/home/db2inst1 db2:v11.1-7
When i look into the container there is a home-directory of the db2inst1 user wherein the db-instance places its data. I thought if i create a volume with the home-directory as mountpoint, it would cause my data to be persistet in it after a restart of the container.
Has anyone an idea what the problem could be? I cant find a wiki or useful documentation.
The solution was to create the volume with the correct target (mount-point). The db2-image uses
/home/db2inst1/data
as its data-directory.

run Mysql and Wordpress on Docker, got message Error establishing a database connection

I am a newbie for Docker, I run the command below on terminal
docker run --name mysql-cont -e MYSQL_ROOT_PASSWORD=qwerty -d mysql
docker run --name wp-cont --link mysql-cont:mysql -p 8080:80 -d wordpress
if I access
127.0.0.1:8080
or
localhost:8080
it displays
Error establishing a database connection
It looks like the configure file for mysql does not work well
I searched file docker-compose.yml docker-compose.ymal
but can not get them
Your comment welcome
At first you didn't pass database connection string to Wordpress container as shown here.
If you need docker-compose.yml file you can use this official documentation to help you to implement your project.

Integrate two docker apps - Orthanc and OVIYAM

I am trying to start two docker services. One is Orthanc and other is OVIYAM image viewer. My objective is to be able to view the images that I uploaded in Orthanc in Oviyam.
Step 1 - Upload images in Orthanc
Step 2 - View them in Oviyam
Though am currently able to start these two services, I am not able to integrate these two. I mean I did provide the listening port for OVIYAM which is 1025 in Orthanc.json.
To start Orthanc, I execute the below command
docker run -p 4242:4242 -p 8042:8042 --rm --name orthanc -v /home/test/abcd/abc/new_orthanc/orthanc.json:/etc/orthanc/orthanc.json -v /home/test/abcd/abc/new_orthanc/orthanc-db:/var/lib/orthanc/db jodogne/orthanc-plugins /etc/orthanc --verbose
To start Oviyam, I execute the below command
docker run -it --rm --name oviyam -p 8081:8080 -p 1025:1025 -v /home/test/abcd/abc/oviyam/data/:/usr/local/tomcat/work oviyam:2.7.1
I got the docker files for OVIYAM from this link (https://github.com/mocsharp/oviyam-docker) if that can help.
Though I am able to launch these services successfully, am not sure how I can integrate these two?
Am not sure how to setup this connection/integrate these two apps. Can you please help?
Depends on how those application communicate. If they talk to each other through network requests, you could use something like Docker Compose to start and link them together (https://docs.docker.com/compose/ , https://dev.to/mozartted/docker-networking--how-to-connect-multiple-containers-7fl).

How to debug persistent data volume mount for Docker Odoo container?

I followed the standard Odoo container instructions on Docker to start the required postgres and odoo servers, and tried to pass host directories as persistent data storage for both as indicated in those instructions:
sudo mkdir /tmp/postgres /tmp/odoo
sudo docker run -d -v /tmp/postgres:/var/lib/postgresql/data/pgdata -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -e POSTGRES_DB=postgres --name db postgres:10
sudo docker run -v /tmp/odoo:/var/lib/odoo -p 8069:8069 --name odoo --link db:db -t odoo
The Odoo container shows messages that it starts up fine, but when I point my web browser at http://localhost:8069 I get no response from the server. By contrast, if I omit the -v argument from the Odoo docker run command, my web browser connects to the Odoo server fine, and everything works great.
I searched and see other people also struggling with getting the details of persistent data volumes working, e.g. Odoo development on Docker, Encountered errors while bringing up the project
This seems like a significant gap in Docker's standard use-case that users need better info on how to debug:
How to debug why the host volume mounting doesn't work for the odoo container, whereas it clearly does work for the postgres container? I'm not getting any insight from the log messages.
In particular, how to debug whether the container requires the host data volume to be pre-configured in some specific way, in order to work? For example, the fact that I can get the container to work without the -v option seems like it ought to be helpful, but also rather opaque. How can I use that success to inspect what those requirements actually are?
Docker is supposed to help you get a useful service running without needing to know the guts of its internals, e.g. how to set up its internal data directory. Mounting a persistent data volume from the host is a key part of that, e.g. so that users can snapshot, backup and restore their data using tools they already know.
I figured out some good debugging methods that both solved this problem and seem generally useful for figuring out Docker persistent data volume issues.
Test 1: can the container work with an empty Docker volume?
This is a really easy test: just create a new Docker volume and pass that in your -v argument (instead of a host directory absolute path):
sudo docker volume create hello
sudo docker run -v hello:/var/lib/odoo -p 8069:8069 --name odoo --link db:db -t odoo
The odoo container immediately worked successfully this way (i.e. my web browswer was able to connect to the Odoo server). This showed that it could work fine with an (initially) empty data directory. The obvious question then is why it didn't work with an empty host-directory volume. I had read that Docker containers can be persnickety about UID/GID ownership, so my next question was how do I figure out what it expects.
Test 2: inspect the running container's file system
I used docker exec to get an interactive bash shell in the running container:
sudo docker exec -ti odoo bash
Inside this shell I then looked at the data directory ownership, to get numeric UID and GID values:
ls -dn /var/lib/odoo
This showed me the UID/GID values were 101:101. (You can exit from this shell by just typing Control-D)
Test 3: re-run container with matching host-directory UID:GID
I then changed the ownership of my host directory to 101:101 and re-ran the odoo container with my host-directory mount:
sudo chown 101:101 /tmp/odoo
sudo docker stop odoo
sudo docker rm odoo
sudo docker run -v /tmp/odoo:/var/lib/odoo -p 8069:8069 --name odoo --link db:db -t odoo
Success! Finally the odoo container worked properly with a host-directory mount. While it's annoying the Odoo docker docs don't mention anything about this, it's easy to debug if you know how to use these basic tests.

Link docker containers (Drupal and MariaDB)

To start I built a docker container from the MariaDB docker image.
After that I loaded a database dumpfile in the running container.
[MariaDB status][1]
Everything goes fine.
When I want to run/link the Drupal image:
docker run --name drupaldocker --link mariadbdocker:mariadb -p 8089:80 -d drupal
I can reach the drupal installation page, but when I want to load the database I always have the same errors:
-host, pass or dbname is wrong.
But I'm pretty sure my credentials are right.
It seems that my drupal container can't find the mariadb image.
Docker links is a deprecated feature and should be avoided: https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/
I assume you have a container named mariadbdocker running.
If you gain bash access inside drupaldocker container, you should be able to ping mariadb alias like this:
docker run --name drupaldocker --link mariadbdocker:mariadb -p 8089:80 -it drupal /bin/bash
If ping succeeds then you probably still have credentials issue.

Resources