Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.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 up上主机中的Docker运行脚本_Bash_Docker_Docker Compose_Dockerfile_Docker Machine - Fatal编程技术网

Bash Docker compose up上主机中的Docker运行脚本

Bash Docker compose up上主机中的Docker运行脚本,bash,docker,docker-compose,dockerfile,docker-machine,Bash,Docker,Docker Compose,Dockerfile,Docker Machine,我的问题涉及如何在docker compose up指令上运行脚本的最佳实践 目前,我正在主机和容器之间共享一个卷,以使脚本更改对主机和容器都可见。 类似于监视脚本轮询配置文件上的更改。脚本必须根据预定义的规则对主机上的更改进行操作 我如何在docker compose up指令上启动此脚本,甚至从服务的Dockerfile启动此脚本,以便每当容器启动时,“watcher”都可以找到所做的任何更改并写入其中 所讨论的容器将始终运行在Debian/Ubuntu操作系统上,并且应该是独立于体系结构的

我的问题涉及如何在docker compose up指令上运行脚本的最佳实践

目前,我正在主机和容器之间共享一个卷,以使脚本更改对主机和容器都可见。 类似于监视脚本轮询配置文件上的更改。脚本必须根据预定义的规则对主机上的更改进行操作

我如何在docker compose up指令上启动此脚本,甚至从服务的Dockerfile启动此脚本,以便每当容器启动时,“watcher”都可以找到所做的任何更改并写入其中

所讨论的容器将始终运行在Debian/Ubuntu操作系统上,并且应该是独立于体系结构的,这意味着它也应该能够在ARM上运行

我希望在主机上运行脚本,而不是在容器内。我需要主机更改其网络接口配置,以便轻松适应主机需要更改的任何环境我重复。。这对用户来说应该是无缝的,并且可以在容器内运行的Web界面上轻松编辑,以适应新的环境


目前,我使用一个基于crontab的脚本在主机上运行。我只想知道如何从容器内部在主机上运行脚本的最佳实践和示例,以便安装操作员可以轻松地运行docker compose up。

脚本需要在前台连续运行

在Dockerfile中,使用指令并将脚本定义为参数


使用cli时,使用
docker run-d IMAGE SCRIPT

可以为
docker compose up
创建别名。在
~/.bash\u别名中放入类似的内容(在Ubuntu中):

我不确定是否可以从容器在主机上运行脚本,但如果可能的话,这是一个严重的安全缺陷。容器应该被隔离,这就是使用容器的要点

我只想知道如何从容器中在主机上运行脚本的最佳实践和示例,以便安装操作员能够轻松地运行docker compose

似乎没有适用于您的案例的最佳实践。这里提出的一种解决方法是:使用
客户机/服务器
技巧

  • 主机应运行小型服务器(选择端口并指定您应等待的请求类型)
  • 容器启动后,应将此请求发送到该服务器
  • 然后,主机应运行脚本/触发所需的更改

  • 这可能会有严重的安全问题,因此使用时请自行承担风险。

    我不完全确定您是否理解这个问题。我的意思是,当容器上升时,我需要在主机上运行一个脚本。因此,容器和主机可以相互通信,以便我可以更改主机上的当前网络配置。CMD指令将在运行的容器内运行脚本,而不是在主机内,也不应该运行。您的问题不是很清楚。容器不打算与主机交互。您可以使用
    docker run--network=host
    来解决这个问题,以使用主机的网络堆栈直接公开容器。您也可以将主机的文件系统装入容器中。听起来您需要一个包装器脚本,或者重新思考如何使用docker。感谢您的回答,这是向前迈出的一步,但这与让脚本同时调用编写和运行sript没有多大区别。关于安全问题,这与运行任何web应用程序或任何连接到internet的应用程序是一样的。此用例不需要隔离特性,因为它是跨所有平台部署特性。脚本是预定义的,其用户不可编辑。也不是可注入的字符,并且不会授予用户shell访问权限。仅向脚本调用发送信号,避免主动轮询等。谢谢,我关心的是在主机中执行代码。假设一个用户在容器中添加了可以在主机上执行的内容。一个简单的
    ssh-R
    可以公开您的基础结构。不管怎样,风险由你来承担,我只想指出一点让你知道。另外,我建议您在发布此问题之前很久就阅读@tgogosI've seed it@charli提供的链接,因为关于允许容器在主机上运行某些内容的主题对于大多数人来说似乎是禁忌,但正如我回答tgogos时所说的,可能我错过了命令,但脚本始终在容器上而不是主机上运行。但我可能误解了这个命令,如果你们能给我指出正确的方向,我将不胜感激。你们看了这个吗?“?是的,我看了,但我只是不理解这个命令,或者它就是不起作用。”。如果您手头有docker和ubuntu映像,请尝试以下操作:$docker run--rm--privileged-v/sbin/:/sbin ubuntu/sbin/ifconfig然后$ifconfig我在这里遗漏了什么吗?第一个命令打印关于容器的信息(在我的情况下,
    eth0
    get
    172.17.0.2
    )第二个打印关于主机的信息。问题是什么?那么,这与运行容器和运行docker exec-it容器bash ifconfig有何不同,我如何让它在主机上使用指令--priviliged,我不是指ifconfig,而是任何shell/bash脚本运行命令?我会将您的答案标记为正确,对于我目前在主机上使用脚本、在共享卷上轮询更改的方法,实际上带来了一种不同的方法,并且鉴于这个问题似乎没有一个具体的答案,但是关于安全问题,我不得不不同意你的看法。Docker并不是为了创建一个安全层,而是为了便于移植(是否正确装运?),如果您的容器受到破坏,那么您就是
    alias up="docker-compose up; ~/your_script.sh"