如何在交互模式下运行docker-compose容器,以便其他容器可以看到它?

场景:我在代码中设置了一个断点,它被挂载(作为一个卷)到由docker-compose创build的容器中。 代码是一个odoo模块,所以它是odoo容器的一部分。

还有一个webapp容器,它有一个链接到odoo为了使用API​​。

odoo容器不公开API端口,因为主机不需要它; webapp容器当然可以看到它。

services: odoo: volumes: - localpath:/mnt/extra-addons-bundles webapp: links: - odoo 

当然,断点的目的是让我控制应用程序 – 所以我需要一个TTY附加。 我可以用docker-compose run --rm odoo 。 但是,当我这样做的时候,它会创build一个新的容器,所以Web应用程序从来没有真正击中它。 另外,它并不告诉我新的容器是什么,所以我必须手动弄明白这一点。

我可以使用docker docker exec在odoo容器中运行另一个odoo,但是必须在新的端口上运行它,从而将webappconfiguration更改为使用这个新的实例。

有没有办法实现我想要的,即以交互模式运行odoo容器,以便webapp容器可以看到它,而不需要重新configurationwebapp容器?

答案是在docker-compose文件中使用tty: true ,然后docker attach来实际获得连接到你的terminal的进程。

试试这个,看看它是否工作

 services: odoo: volumes: - localpath:/mnt/extra-addons-bundles tty: true stdin_open: true webapp: links: - odoo 

我还添加了stdin_open以防万一你需要它,如果你不只是删除它

编辑-1

另外,如果您需要连接到正在运行的容器,则需要使用docker-compose docker attach作为docker-compose没有该function

 docker attach <containername>