So what am I missing?
O que você está perdendo é que service
comunica com init
, essencialmente escapando do namespace da rede. O aplicativo acaba sendo executado no mesmo namespace de rede que o sistema init (por padrão).
Em seu núcleo, o problema é que service
não apenas fork
e exec
o daemon do aplicativo binário (que preservaria o namespace). Em vez disso, ele faz pouco mais do que passar seus parâmetros para init
através (acredito) de um soquete de domínio Unix. Os contêineres seguros também isolam o sistema de arquivos para evitar esse tipo de coisa.
Eu tentaria apenas invocar o binário do daemon do aplicativo diretamente (sob ip netns exec [namespace]
, é claro). Ou use um software de contêiner real onde alguém já tenha resolvido todos os detalhes complicados ...