Docker to Docker Oracle 12c Connection I'm trying to run a simple exercise with two docker containers with oracle database 12c (store/oracle/database-enterprise:12.2.0.1). It's pretty straigthforward to run both containers but I haven't been able to connect from one to the other, what am I missing? Both containers are running on the same machine (a MacBook) and both are using the same network, I can reach them with ping

Any help would be very useful

The commands I'm using:

docker container run -d -h localdomain --name odbc -p 1521:1521 -p 5500:5500 -e DB_SID=ORCLCDB -e DB_PDB=ORCLPDB1 -e DB_DOMAIN=localdomain store/oracle/database-enterprise:12.2.0.1-slim

docker container run -d -h localdomain --name odbc2 -p 1522:1521 -p 5501:5500 -e DB_SID=ORCLCDB -e DB_PDB=ORCLPDB1 -e DB_DOMAIN=localdomain store/oracle/database-enterprise:12.2.0.1-slim
Make sure DB is up and running with status healthy 

docker container ps

Make sure Oracle instant client is installed on host if trying to connect from host to containers  via sqlplus or any 3rd party gui tools and set up connections in tnsnames.ora on host 


3̶. S̶e̶t̶ ̶u̶p̶ ̶c̶o̶n̶n̶e̶c̶t̶i̶o̶n̶s̶ ̶i̶n̶ ̶t̶n̶s̶n̶a̶m̶e̶s̶.̶o̶r̶a̶ ̶o̶n̶ ̶b̶o̶t̶h̶ ̶c̶o̶n̶t̶a̶i̶n̶e̶r̶s̶.̶   (skip this step)


Make sure Oracle listener is up and running and you can find out services names on each containers by running the command

lsnrctl status 

You need to find out mapped ports. Execute command

docker port orcl


From my container the output is:

$ docker port orcl
1521/tcp -&gt; 0.0.0.0:32769
5500/tcp -&gt; 0.0.0.0:32768

You can connect directly from sqldeveloper or setup tns entries in tnsnames.ora for sqlplus client.

Here is the screenshot connecting from sqldeveloper
   

For sqlplus client on host

#tnsname entry for container 1
orclcdb =
(DESCRIPTION =
  # host ipaddress and mapped port for 1521 is 32769
 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.101)(PORT = 32769))
 (CONNECT_DATA =
(SERVER = DEDICATED)
#service name from lsnrctl status command
(SERVICE_NAME = ORCLCDB.localdomain)
)
)

Verify tnsname entries with the command from host:

tnsping  orclcdb



Note

My setup was on Windows 10(host) and docker running on VM. I executed the following command to find the ipaddress of docker VM

Input:

docker-machine ls


Output:





Correction: 

I didn't notice parameter -p 1521:1521 for the container start up command. That parameter exposes port 1521 for public. Just use container ipaddress(from docker-machine ls) and same port 1521 for sqlplus client connection from the host.