【问题标题】:Extend Dockerfile nginx image扩展 Dockerfile nginx 镜像
【发布时间】:2021-04-07 22:30:16
【问题描述】:

我遇到了一个 nginx 限制问题,需要我扩展我的 nginx dockerfile 的配置,我发现一个 Dockerfile 扩展逻辑列出了 here 但我无法让它工作,我'不确定我应该为COPY . /app/ 使用什么,因为我不需要将任何内容复制到图像中,我只需要那个魔法脚本 .

这是整个 Dockerfile 供参考

FROM jwilder/nginx-proxy
COPY . /app/
RUN { \ 
    # Increased the number of worker_processes from any number to 4
    sed -i 's/\(worker_processes\s*\)[0-9]*;/\14;/' /etc/nginx/nginx.conf; \
    # Increased the number of worker_connections from any number to 19000
    sed -i 's/\(worker_connections\s*\)[0-9]*;/\119000;/' /etc/nginx/nginx.conf; \
}

删除 COPY 不起作用,构建上下文变得很大(超过 1GB),所以我猜它正在抓取它所在的 repo 中的所有内容。

【问题讨论】:

  • 一个选项是在运行映像时使用docker run -v 选项替换配置文件。这不能进行就地编辑——你需要提供一个完整的配置文件——但你也不需要这种方法的自定义图像。
  • the build context just gets huge (over 1GB) so I'm guessing it's grabbing everything in the repo it's in,您可能需要一个.dockerignore 文件
  • @DavidMaze 我知道的没错,我以为它只会“知道”配置哈哈

标签: docker nginx dockerfile jwilder-nginx-proxy


【解决方案1】:

wader from Github 将他的应用放入图像中。你可以忽略它。

确实如此,您必须删除 COPY 行,然后您将获得带有更改设置的 nginx-proxy

Docker 将始终创建一个build context。上下文包含位于同一工作目录中的所有文件的副本。
因此,如果您运行docker build .,那么当前文件夹中的所有文件(和目录)都将被添加到构建上下文中。
切勿在根目录或主目录上运行 docker build


根据 KevinDanikowski 的回答:是的,他的步骤有效,但这些步骤不正确,并不能解释问题。

您无需克隆任何 git-repo 即可使 Dockerfile 正常工作。
在这种情况下,它会起作用,因为来自@KevinDanikowski 的链接回购并不完整。
只创建一个新文件夹并将Dockerfile 放入其中要容易得多。

BASH:

$ mkdir newFolder
$ cd newFolder
$ cat > Dockerfile << EOF
FROM jwilder/nginx-proxy

RUN { \ 
    # Increased the number of worker_processes from any number to 4
    sed -i 's/\(worker_processes\s*\)[0-9]*;/\14;/' /etc/nginx/nginx.conf; \
    # Increased the number of worker_connections from any number to 19000
    sed -i 's/\(worker_connections\s*\)[0-9]*;/\119000;/' /etc/nginx/nginx.conf; \
}
EOF
$ docker build .

【讨论】:

  • 是的,我错误地认为我可以从任何地方运行 dockerfile,因为它正在提取该图像,但事实并非如此,它必须来自您提到的实际目录。
  • @KevinDanikowski 所以我解决了你的问题? ;)
  • 对不起,我实际上是解决它的人,但直到 48 小时后我才能检查它是否已解决(idk 为什么有人投反对票)。不过我会支持你的,因为它提供了额外的上下文
  • 我不是反对者,但我不明白你的回答如何解决问题。
  • “我找到了,你需要在 repo 中运行它来构建那个镜像。所以在这种情况下,从github.com/nginx-proxy/nginx-proxy 并在此处用你更新的文件替换 Dockerfile,然后运行它。” ,我在 Q 中提到的“构建大小 ... 1GB”意味着我不是从错误的地方运行它,基本上是你的问题添加了上下文
【解决方案2】:

我发现它称为derived dockerfile,您需要在存储库中运行它来构建该映像(而不是在您可能从中获得 1GB 构建上下文的存储库中。

所以解决办法:

  1. 克隆源代码库https://github.com/nginx-proxy/nginx-proxy

  2. 在此处将Dockerfile 替换为您更新的@

  3. 运行你的 docker build 命令

我只是这样做并推送,以kmdanikowski/nginx-proxy 公开提供,但我建议你自己做,这样它可以是最新的。

【讨论】:

  • 您可以从任何地方运行问题中的 Dockerfile(没有冒犯的 COPY 行),就像您可以构建“正常”映像 FROM python:3.9 而实际上没有 Docker 库映像来源已签出。
  • @DavidMaze 我确实尝试过,但没有成功。我认为你可以,但至少根据我的经验,这不是真的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-02
  • 2014-11-12
  • 2018-09-20
  • 1970-01-01
  • 2014-05-19
  • 1970-01-01
相关资源
最近更新 更多