将Docker容器的DNS指向特定端口

97次阅读
没有评论

问题描述

想知道是否可以将Docker容器查询的DNS服务器(通过docker run --dns等方式)分配到特定端口,而不是传统的53端口。他构建了一个基于Python的自定义DNS服务器,用于特定的用例,但由于Apache MESOS Marathon存在问题,无法在容器中运行它并使用传统的TCP/UDP 53端口。他使用的Docker镜像是python:3.6.12-slim-buster

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

在运行容器时,可以使用--publish-p标志来将服务器的端口绑定到其他端口。以下是操作步骤:

  1. 确保你的自定义DNS服务器容器已经构建并可用。如果没有,请根据你的需要构建一个容器,确保你的DNS服务器在容器内运行。
  2. 在运行容器时,使用-p标志将容器内的服务器端口绑定到其他端口。以下是一个示例命令:

shell
docker run -d -p <宿主机端口>:<容器内端口> your_custom_dns_image

其中,<宿主机端口>是你希望映射到的主机端口,<容器内端口>是你的自定义DNS服务器在容器内监听的端口。例如,如果你希望将容器内的端口8888映射到主机的端口5353,可以这样运行容器:

shell
docker run -d -p 5353:8888 your_custom_dns_image

  1. 一旦容器运行起来,它的自定义DNS服务器将通过映射的主机端口5353提供服务。你可以在你的应用程序中配置使用该端口来查询DNS服务器。

请注意,通过映射端口,你可以将容器内的端口映射到主机的其他端口,以适应你的需求。这使得你可以在容器内运行服务器,而无需使用传统的53端口。

方案2

如果你希望在Docker Compose中实现相同的操作,可以按照以下步骤进行:

  1. 创建一个docker-compose.yml文件,用于定义你的容器服务。
  2. 在该文件中,为你的自定义DNS服务器服务配置端口映射。以下是一个示例:

yaml
version: '3'
services:
custom_dns:
image: your_custom_dns_image
ports:
- "5353:8888" # 将容器内的端口8888映射到主机的端口5353

在上面的示例中,我们定义了一个名为custom_dns的服务,将容器内的端口8888映射到主机的端口5353。

  1. 运行以下命令以启动服务:

shell
docker-compose up -d

这将根据docker-compose.yml文件中的配置启动自定义DNS服务器容器,并将容器内的端口8888映射到主机的端口5353。

通过这两种方法,你可以将自定义DNS服务器容器的端口映射到其他端口,以满足你的特定需求,并避免使用传统的53端口。这样,你就可以在Apache MESOS Marathon等场景下运行你的容器。

正文完