Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我是否可以在没有bash脚本的情况下使用docker compose检查容器,然后将文件从容器复制到主机?_Docker_Kubernetes_Docker Compose_Dockerfile_Docker Swarm - Fatal编程技术网

我是否可以在没有bash脚本的情况下使用docker compose检查容器,然后将文件从容器复制到主机?

我是否可以在没有bash脚本的情况下使用docker compose检查容器,然后将文件从容器复制到主机?,docker,kubernetes,docker-compose,dockerfile,docker-swarm,Docker,Kubernetes,Docker Compose,Dockerfile,Docker Swarm,这是我正在尝试并行化的工作流: 码头工人建造 码头工人赛跑 docker inspect container->returns false docker cp容器:文件/主机/ 我想使用docker compose在一台主机上完成这项工作,然后稍后转换到Kubernetes,这样我就可以在多台主机上协调这项工作 我应该创建一个bash脚本并让它在Dockerfile中运行吗 我正在寻找一个社区认可的最佳实践解决方案。在单主机Docker land中,您可以尝试安排事情,以便Docker run完

这是我正在尝试并行化的工作流:

  • 码头工人建造
  • 码头工人赛跑
  • docker inspect container->returns false
  • docker cp容器:文件/主机/
  • 我想使用docker compose在一台主机上完成这项工作,然后稍后转换到Kubernetes,这样我就可以在多台主机上协调这项工作

    我应该创建一个bash脚本并让它在Dockerfile中运行吗


    我正在寻找一个社区认可的最佳实践解决方案。

    在单主机Docker land中,您可以尝试安排事情,以便
    Docker run
    完成您需要的一切。避免
    docker-inspect
    (这会排除通常不感兴趣的低级诊断)和
    docker-cp
    。根据构建方式的不同,您可以在Dockerfile中构建工件,并将其复制出来

    docker build-t图像。
    #用“猫”把它弄出来?
    docker run--rm映像\
    容器中的cat/app/file\#
    >文件#通过容器的标准输出发送到主机
    #使用卷将其导出?
    docker run--rm-v$PWD:/host映像\
    cp/app/file/host
    
    根据您正在构建的内容,您可能会进一步扩展此功能,以在卷中传递输入和输出,因此映像只是一个工具链。对于最小Go应用程序,使用,例如:

    #不要docker构建任何东西,而是使用工具链运行容器
    docker run--rm\
    -v$PWD:/app\
    -w/应用程序\
    戈兰:1.15\
    go build-o_应用程序。/cmd/the_应用程序
    
    在最后一次设置中,
    -w
    工作目录是绑定安装的
    /app
    目录,因此
    转到build-o.\u app
    将写入主机

    由于此设置更倾向于一次性容器(注意
    docker run--rm
    选项),因此它与Compose不匹配,Compose通常需要长时间运行的服务器类型容器


    这种设置也不能很好地转换为Kubernetes。Kubernetes并不擅长在容器之间或与集群外的系统共享文件。如果您碰巧有一个NFS服务器,您可以使用它,但没有本机选项;最容易得到的是不能在多个Kubernetes吊舱(容器)之间重用的
    ReadWriteOnce

    原则上,您可以编写一个Kubernetes作业,只进行一次编译。它无法运行
    docker build
    ,因此“运行”步骤必须执行实际的构建。你不能将kubectl cp


    这里更好的高级方法是查找或安装某种网络可访问的存储,特别是用于保存结果的存储(人工服务器;对象存储,如AWS S3)。将构建序列重写为一个“任务”,它获取输入和输出的位置并运行构建,而忽略本地文件系统。设置一个类似RabbitMQ的作业队列,并将任务注入队列。最后,将构建器worker作为Kubernetes部署运行;它将并行构建与部署中的
    副本数量一样多的东西:

    这可能是有希望的:每个节点运行作业很困难。假设这样做的目的是将文件部署到每个节点。我应该提到,我想从容器复制回主机的文件是在每个容器上运行的测试结果。使用卷并将结果推送到容器中将更容易映射到kubernetes。我最后只是创建了一个bash从docker compose调用脚本,但现在让gitlab ci运行docker compose是一个非常困难的问题。