如何告诉docker文件在docker compose的运行命令中使用哪些DNS?

如何告诉docker文件在docker compose的运行命令中使用哪些DNS?,docker,dns,docker-compose,dockerfile,Docker,Dns,Docker Compose,Dockerfile,假设我有一个docker compose文件,如下所示: version: '2' services: randomDNStest: dns: - ###.###.###.### network_mode: "host" build: . FROM gitlab/gitlab-runner RUN ["gitlab-runner", "register", "--non-interactive", "--url", "THE INTERNAL GIT

假设我有一个docker compose文件,如下所示:

version: '2'
services:
  randomDNStest:
    dns: 
      - ###.###.###.###
    network_mode: "host"
    build: .
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:

version: '2'
services:
  randomDNStest:
    dns: 
      - ###.###.###.###
    network_mode: "host"
    build: .
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服务器(在run命令中)

与我想要的相似但不正确的东西:
  • 使用
    docker运行--dns
    • 不适用于docker compose
  • 修改主机上的DNS服务以侦听可从容器内访问的非本地主机地址,如所述并已实现。
    • 可能有效,但需要在主机上进行设置
  • 使用docker compose中的
    dns
    部分,如上所示。
    • 这在运行时工作,而不是构建时
  • 使用curl的
    --dns servers
    参数和描述的参数
    • Curl命令格式:
      Curl-X POST-F token=qytsh88wasa_LA6G2mf--dns服务器##########https://INTERNAL_GIT_LAB//api/v4/runners
      
    • Curl的
      --dns servers
      命令必须按照所述和编译,但我无法获得正确的依赖项,这只能避免在我的特定用例中使用该问题
  • 使用
    网络\u模式:“主机”
    驱动程序,如上所述
    • 这不管用

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

此图像的默认设置表明它根本不打算用作基础图像。您只需将命令和其他设置放入
docker compose.yml
文件中即可

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

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

执行此操作时,我会得到
gitlab runner |正在注册runner。。。成功运行程序=
<代码>gitlab runner | runner已成功注册。可以随意启动它,但是如果它已经在运行,那么配置应该自动重新加载
gitlab runner已退出,代码为0
注册有效,但运行程序尚未启动。哦,我需要添加
gitlab runner run
。。。dohWait,实际上我只能运行一个命令,所以我不能在registeringOk之后使用
run
,看起来我可以为第二个命令添加另一个容器