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

时间:2017-09-15 20:54:42

标签: debugging docker docker-compose

场景:我在代码中设置了一个断点,它被挂载(作为卷)到由docker-compose创建的容器中。代码是一个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执行此操作。但是,当我这样做时,它会创建一个新容器,因此webapp实际上从未实现过它。另外,它没有告诉我新的容器被调用了什么,所以我必须手动弄清楚它是做什么的。

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

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

2 个答案:

答案 0 :(得分:0)

试试这个,看它是否有效

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

如果您不需要,我还添加了stdin_open,如果您不想删除它

修改-1

此外,如果您需要附加到正在运行的容器,则需要使用docker attach,因为docker-compose没有该功能

docker attach <containername>

答案 1 :(得分:0)

答案是在docker-compose文件中使用tty: true,并docker attach实际将该进程附加到终端。