2

I'm trying to test my application on TeamCity docker agent. Application is running internal docker in gradle.

Here's my docker-compose.yml:

version: '3'
services:
  db:
    image:
        docker.int.address.com/postgres:9.6
    ports:
        - 5432:5432
    volumes:
        - ./init.sql:/docker-entrypoint-initdb.d/
    environment:
      POSTGRES_PASSWORD: postgres
      POSTGRES_USER: postgres
    networks:
      my_net:
        ipv4_address: 172.19.0.3
networks:
  my_net:
    ipam:
      driver: default
      config:
        - subnet: 172.19.0.0/24

The output of agent:

[13:13:59][docker] Successfully started process 'command 'docker-compose''
[13:14:00][docker] Some networks were defined but are not used by any service: my_net
[13:14:00][docker] db uses an image, skipping
[13:14:00][docker] Starting process 'command 'docker-compose''. Working directory: /checkout Command: docker-compose -f /checkout/docker-compose.yml --version
[13:14:00][docker] Successfully started process 'command 'docker-compose''
[13:14:00][docker] Starting process 'command 'docker-compose''. Working directory: /checkout Command: docker-compose -f /checkout/docker-compose.yml --version
[13:14:00][docker] Successfully started process 'command 'docker-compose''
[13:14:01][docker] Starting process 'command 'docker-compose''. Working directory: /checkout Command: docker-compose -f /checkout/docker-compose.yml up -d
[13:14:01][docker] Successfully started process 'command 'docker-compose''
[13:14:01][docker] Some networks were defined but are not used by any service: my_net
[13:14:02][docker] Recreating checkout_db_1 ...
[13:14:02][docker] Recreating checkout_db_1
[13:14:03][docker] Starting process 'command 'docker-compose''. Working directory: /checkout Command: docker-compose -f /checkout/docker-compose.yml --version
[13:14:03][docker] Successfully started process 'command 'docker-compose''
[13:14:04][docker] Starting process 'command 'docker-compose''. Working directory: /checkout Command: docker-compose -f /checkout/docker-compose.yml config --services
[13:14:04][docker] Successfully started process 'command 'docker-compose''
[13:14:04][docker] Starting process 'command 'docker-compose''. Working directory: /checkout Command: docker-compose -f /checkout/docker-compose.yml ps -q db
[13:14:04][docker] Successfully started process 'command 'docker-compose''
[13:14:05][docker] [1A [2K
[13:14:05][docker] Recreating checkout_db_1 ... done
[13:14:05][docker] [1BSome networks were defined but are not used by any service: my_net
[13:14:05][docker] Container ID of service db is fc3d436189aa1e455a7f4e8524f99605e87ce72b214844097534cbf4a89a4d77
[13:14:05][docker] Starting process 'command 'docker''. Working directory: /checkout Command: docker inspect fc3d436189aa1e455a7f4e8524f99605e87ce72b214844097534cbf4a89a4d77
[13:14:05][docker] Successfully started process 'command 'docker''
**[13:14:06][docker] Will use 172.17.0.1 (network bridge) as host of db**
[13:14:06][docker] Will use com.address.gradle.dockercompose.ServiceHost(172.17.0.1, NetworkGateway) as host of service db
[13:14:06][docker] Exposed TCP port on service 'db:5432' will be available as 5432
[13:14:06][docker] Starting process 'command 'docker''. Working directory: /checkout Command: docker inspect fc3d436189aa1e455a7f4e8524f99605e87ce72b214844097534cbf4a89a4d77
[13:14:06][docker] Successfully started process 'command 'docker''
[13:14:06][docker] Probing TCP socket on 172.17.0.1:5432 of service 'db_1'
[13:16:14][docker] Waiting for TCP socket on 172.17.0.1:5432 of service 'db_1' (Connection timed out (Connection timed out))
[13:18:22][docker] Waiting for TCP socket on 172.17.0.1:5432 of service 'db_1' (Connection timed out (Connection timed out))
[13:20:30][docker] Waiting for TCP socket on 172.17.0.1:5432 of service 'db_1' (Connection timed out (Connection timed out))
[13:22:38][docker] Waiting for TCP socket on 172.17.0.1:5432 of service 'db_1' (Connection timed out (Connection timed out))
[13:24:47][docker] Waiting for TCP socket on 172.17.0.1:5432 of service 'db_1' (Connection timed out (Connection timed out))

The problem is the image is on 172.19.0.xx3:5432 but it's reaching for 172.19.0.1:5432

What should I write in docker-compose.yml so it can get the right host?

1 Answers1

0

In the application service, where it reaches out to the remove host, place the name of the remote host. Bring up both services, run docker ps on a console. The database service will have a name of somedirectory_db. Take this and place it in your application logic as part of the connection string; example:

DSN=host:somdirectory_db;port=3306;schema=some_database

Essentially, if both services are on the same network, you can use the service name as a resolvable DSN address.

Ref: How to reach docker containers by name instead of IP address?

David J Eddy
  • 1,999
  • 1
  • 19
  • 37