简体   繁体   English

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

[英]How to set host of service in Docker?

I'm trying to test my application on TeamCity docker agent. 我正在尝试在TeamCity Docker代理上测试我的应用程序。 Application is running internal docker in gradle. 应用程序在gradle中运行内部docker。

Here's my docker-compose.yml : 这是我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 问题是图像在172.19.0.xx3:5432上,但是到达了172.19.0.1:5432

What should I write in docker-compose.yml so it can get the right host? 我应该在docker-compose.yml以便它可以获取正确的主机?

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. 启用这两种服务,然后在控制台上运行docker ps The database service will have a name of somedirectory_db . 数据库服务的名称为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. 本质上,如果两个服务都在同一网络上,则可以将服务名称用作可解析的DSN地址。

Ref: How to reach docker containers by name instead of IP address? 参考: 如何通过名称而不是IP地址访问Docker容器?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM