gpt4 book ai didi

docker - 如何创建Docker运行时参数以在运行时将主机文件复制到容器中?

转载 作者:行者123 更新时间:2023-12-02 21:04:39 25 4
gpt4 key购买 nike

我正在尝试为Squid3创建一个Docker镜像,该镜像在运行时将接受表示主机上文件的命令行参数以通过容器内的/etc/squid/squid.conf复制。我认为这是不可能的,因为参数将由容器本身处理,因此无法访问主机。但是,我想问一下我是否还没有发现的魔法。

在没有这种情况的情况下,我只使用kotaimen/squid3图像(https://github.com/Kotaimen/docker-squid3),您可以挂载一个卷以映射到/etc/squid

无论如何,我认为能够做到这样真是太好了:

docker pull squid3
docker run squid3 ~/squid.conf

我仍处于创建过程的初期,因此欢迎提出任何建议。我正在查看DockerHub上的Squid3图像以供引用。

最佳答案

如您所了解,在命令行中传递的所有参数都由容器内的程序处理-当然,该程序无法直接访问主机文件系统。

为了将文件从主机文件系统放置到容器中,我只看到2种合理的方式(和1种不合理的方式):

  • 批量安装相应的文件-与kotaimen/squid3图像类似:
  • 不需要自定义图像
  • 在运行时挂载/更改
  • 文件

  • docker run -v ~/squid.conf:/etc/squid/squid.conf:ro squid3
  • 创建您自己的镜像,其中将您的自定义配置包含到基本镜像中:
  • 图像中包含
  • 配置
  • 只能在构建时更改
  • # Dockerfile
    FROM squid3
    COPY squid.conf /etc/squid/squid.conf
  • hacky方式:使用自定义脚本作为入口点,可以从stdin准备好配置。然后,您可以在启动时传递文件:

  • docker run --entrypoint 'sh -c "cat > /etc/squid/squid.conf; ./entrypoint.sh"' squid3 < ~/squid.conf

    但这有一些严重的缺点:
  • 您需要编写一个自定义入口点并将其包括在自定义图像中每次在命令行中使用一个hacky --entrypoint(见上文)
  • 容器不能再使用stdin进行其他操作,例如特别是交互式输入
  • 即使没有连接标准输入,入口点也会在每个容器重新启动/启动时运行,即,这将在容器重启后导致配置为空:

  • docker run --name squid3 --entrypoint 'sh -c "cat > /etc/squid/squid.conf; ./entrypoint.sh"' squid3 < ~/squid.conf
    docker restart squid3

    关于docker - 如何创建Docker运行时参数以在运行时将主机文件复制到容器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58868035/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com