首页 > 解决方案 > 如何使用来自 Docker 主机的主机名连接到 Docker 容器?

问题描述

我想使用主机名从我的 Docker 主机连接到我的 Docker 容器。

我已经知道如何通过映射它们的端口来连接到容器docker run -p <host-port>:<container-port> ...,然后通过localhost.

此外,我可以使用由docker inspect <container>. 但这些 IP 地址不是静态的。

我怎样才能给容器主机名,这样我就可以通过暴露的端口连接到它们,而不必考虑非静态 IP?

标签: docker

解决方案


在其中使用docker-compose和提供服务。每个容器都将成为服务的一部分,一个容器可以使用该容器所属的服务名称与另一个容器通信。

前任:

 $ cat docker-compose.yml
version: '3.1'

services:
    server:
        image: redis
        command: [ "redis-server" ]
    client:
        image: redis
        command: [ "redis-cli", "-h", "server", "ping" ]
        links:
            - server
  $
  $
  $ docker-compose up
Starting server_1 ... done
Starting client_1 ... done
Attaching to server_1, client_1
client_1  | PONG
server_1  | 1:C 10 Dec 2019 12:59:20.161 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
server_1  | 1:C 10 Dec 2019 12:59:20.161 # Redis version=5.0.6, bits=64, commit=00000000, modified=0, pid=1, just started
server_1  | 1:C 10 Dec 2019 12:59:20.161 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
server_1  | 1:M 10 Dec 2019 12:59:20.162 * Running mode=standalone, port=6379.
server_1  | 1:M 10 Dec 2019 12:59:20.162 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
server_1  | 1:M 10 Dec 2019 12:59:20.162 # Server initialized
server_1  | 1:M 10 Dec 2019 12:59:20.162 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
server_1  | 1:M 10 Dec 2019 12:59:20.162 * Ready to accept connections
client_1 exited with code 0

在这里,我创建了两个服务,server并且client. server启动一个 redis-server 并client尝试连接到服务器。另外,请注意我没有在这里公开端口,因此client容器正在server使用server(service-name)与容器通信

client:
    image: redis
    command: [ "redis-cli", "-h", "server", "ping" ]

推荐阅读