我正在尝试从另一个Docker容器中运行可执行文件,而该文件已经在Docker容器中。这可能吗?
version: '3.7'
services:
py:
build: .
tty: true
networks:
- dataload
volumes:
- './src:/app'
- '~/.ssh:/ssh'
winexe:
build:
context: ./winexe
dockerfile: Dockerfile
networks:
- dataload
ports:
- '8001:8001'
volumes:
- '~/path/to/winexe:/usr/bin/winexe'
- '~/.ssh:/ssh'
depends_on:
- py
networks:
dataload:
driver: bridge
我正在尝试从'py'访问Winexe
答案 0 :(得分:0)
假设您的意思是从一个容器内部运行另一个Docker容器,可以通过以下几种方法完成该操作:
在容器中安装docker
命令,并:
docker
命令直接与主机实例联系。请注意,这实际上使容器root
可以访问主机级!我敢肯定,还有更多的方法可以做到这一点,但是方法2是我最常看到的方法。
如果您打算在另一个已经运行的Docker容器中运行另一个可执行文件,则也可以使用docker exec
以上述方式执行此操作,或者在第二个接受命令的容器中运行某种守护程序,为您运行所需的命令。
答案 1 :(得分:0)
因此,您需要将容器视为两个独立的计算机或服务器,并且它们可以进行相应的交互。
很高兴,docker-compose为您提供了一个URL,可用于在容器之间进行通信。对于docker-compose文件,您可以从py容器访问winexe容器,如下所示:
http://winexe:8001 // or ws://winexe:8001 or postgres://winexe:8001 (you get the idea)
(我在这里使用了端口8001,因为这是您为winexe提供的端口–我不知道它是否可以用于此)。
现在,您需要的是winexe容器中的内容,而不是监听该信号并发送有用的答复(例如浏览器向服务器发送ajax调用)
在此处了解更多信息: