如何在Docker中设置主机服务?

我试图在TeamCity docker agent上testing我的应用程序。 应用程序在gradle中运行内部泊坞窗。

这是我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 

代理的输出:

 [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)) 

问题是图像是在172.19.0.xx3:5432,但它达到了172.19.0.1:5432

我应该在docker-compose.yml写什么,这样才能得到正确的主机?

在应用程序服务中,在其到达除去主机的位置,放置远程主机的名称。 调出这两个服务,在控制台上运行docker ps 。 数据库服务将具有somedirectory_db的名称。 把它作为连接string的一部分放在你的应用程序逻辑中; 例:

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

实质上,如果两个服务在同一个networking上,则可以使用服务名称作为可parsing的DSN地址。

参考: 如何到达docker集装箱的名称,而不是IP地址?