我如何告诉我的Dockerfile在docker-compose的RUN命令中使用哪个DNS?

时间:2019-08-09 16:11:19

标签: docker dns docker-compose dockerfile

说我有一个docker这样的文件:

version: '2'
services:
  randomDNStest:
    dns: 
      - ###.###.###.###
    network_mode: "host"
    build: .

和这样的Dockerfile:

FROM gitlab/gitlab-runner

RUN ["gitlab-runner", "register", "--non-interactive", "--url", "THE INTERNAL GIT LAB INSTANCE", "--registration-token", "MY TOKEN", "--executor", "docker", "--tag-list", "docker", "--description", "DESCRIPTION", "--docker-image",  "docker:19.03.1", "--docker-dns", "###.###.###.###",  "--docker-privileged", "--docker-tlsverify", "--docker-volumes", "/certs/client"]

如何在构建时(在运行命令中)为要使用的Dockerfile指定DNS服务器?

类似于我想要但不正确的事情:

  • 使用docker run --dns
    • 不适用于docker-compose。
  • 按照here和实现here的描述,修改主机上的DNS服务以侦听可从容器内部访问的非本地主机地址。
    • 可能可行,但需要在主机上进行设置。
  • 使用docker-compose中的dns部分,如上所示。
    • 这在运行时有效,而不在构建时有效。
  • 使用curl的--dns-servers参数和描述的参数here
    • 卷曲命令格式:curl -X POST -F token=QytSH_88wASA_LA6G2mf --dns-servers ###.###.###.### https://INTERNAL_GIT_LAB//api/v4/runners
    • Curl的--dns-servers命令必须按照in the curl docsin Nathan Leclaire's blog的描述进行编译,但是我无法正确获得依赖关系,这只能避免在我的特定用例中使用该问题。 。
  • 使用如上所述的here驱动程序network_mode: "host"
    • 这不起作用。

1 个答案:

答案 0 :(得分:1)

您不想在Dockerfile中运行此命令。那里的基本概念是,您可以docker build一次映像,然后docker run该容器的多个副本,或者将映像推送到注册表并从其他系统运行。曾经在某台特定服务器上注册过的GitLab运行器映像对于以后重新docker run来说并没有特别有用。

此图像的GitLab documentation表示它根本不打算用作基本图像。您只需将命令和其他设置放在您的docker-compose.yml文件中

version: '2'
services:
  randomDNStest:
    dns: 
      - ###.###.###.###
    command: >-
      register
      --non-interactive
      --url THE_INTERNAL_GITLAB_INSTANCE
      ...

(如果立即返回,则重新运行docker-compose up将重复该命令。)