我试图查找是否有任何陷阱,需要在容器内暴露端口(tcp),然后在同一容器内将另一个进程消耗(读取/写入)到同一端口。我是否需要撰写/公开/发布此端口? 因此,基本上,是否有任何特定的事情需要做/知道要在容器中公开端口以供内部使用(同一个容器使用)?
答案 0 :(得分:0)
在这种情况下,无需执行任何特定操作。您可以忽略任何Docker物件(公开或发布端口)。
只有该容器中的第二个进程连接到localhost:<port of opened by the first process>
答案 1 :(得分:0)
正确维护两个进程的生命周期非常棘手。如果一个进程死了,您希望某事注意到并杀死另一个进程或重新启动另一个进程,并且您可能想知道这种情况正在发生。 docker logs
可能不会自动合并这两个进程的输出(并且取决于您启动它们的方式,可能不会捕获两者)。如果一个进程比另一个进程需要更多的计算能力,那么就不能在不扩展另一个进程的情况下扩展一个进程。如果您在一个过程中更新软件,则无法在不重新启动另一个过程的情况下重新启动它。
简而言之:通常不建议这样做,这是最佳做法;通常最好在两个单独的容器中运行这些过程。
如果这样做,仅在这种情况下 ,同一容器中的两个进程将彼此视为localhost
,并且可以将其作为环境变量设置来传递一个过程看到另一个。您不需要专门“公开”或“发布”端口。典型的docker-compose.yml
文件看起来像
version: '3'
services:
myapp:
build: .
ports: ['8080:8080']
env:
- BACKEND_URL: 'http://localhost:12345'
但是更好的docker-compose.yml
文件看起来像
version: 3
services:
myapp:
build: .
ports: ['8080:8080']
env:
- BACKEND_URL: 'http://backend:12345'
command: 'myapp -bind 0.0.0.0:8080'
backend:
build: .
command: 'backend -bind 0.0.0.0:12345'