77use WebProject \DockerApi \Library \Generated \Model \ContainerInspectResponse ;
88use WebProject \DockerApiClient \Dto \DockerContainerDto ;
99use function array_unique ;
10+ use function array_values ;
1011use function explode ;
1112
1213final readonly class ContainerResponseToContainerDtoUtil
@@ -17,33 +18,45 @@ public function __invoke(
1718 $ ipAddresses = [];
1819 $ networks = [];
1920
20- foreach ($ containerInspect ->getNetworkSettings ()->getNetworks () as $ networkName => $ network ) {
21- if ('' === $ network ->getIPAddress ()) {
21+ $ networkSettings = $ containerInspect ->getNetworkSettings ();
22+ foreach ($ networkSettings ->getNetworks () as $ networkName => $ network ) {
23+ $ ip = $ network ->getIPAddress ();
24+ if (null === $ ip || '' === $ ip ) {
2225 continue ;
2326 }
24- $ networks [$ networkName ]['aliases ' ] = array_unique ($ network ->getAliases () ?? []);
25- $ networks [$ networkName ]['ip ' ] = $ network -> getIPAddress () ;
26- $ ipAddresses [] = $ network -> getIPAddress () ;
27+ $ networks [$ networkName ]['aliases ' ] = array_values ( array_unique ($ network ->getAliases () ?? []) );
28+ $ networks [$ networkName ]['ip ' ] = $ ip ;
29+ $ ipAddresses [] = $ ip ;
2730 }
2831
2932 $ envVariables = [];
30- foreach ($ containerInspect ->getConfig ()->getEnv () as $ envVar ) {
33+ $ config = $ containerInspect ->getConfig ();
34+ foreach ($ config ->getEnv () ?? [] as $ envVar ) {
3135 if (!str_contains ($ envVar , '= ' )) {
3236 continue ;
3337 }
34- [$ name , $ value ] = explode ('= ' , $ envVar );
38+ [$ name , $ value ] = explode ('= ' , $ envVar, 2 );
3539 $ envVariables [$ name ] = $ value ;
3640 }
3741
42+ $ ports = [];
43+ foreach ($ networkSettings ->getPorts () ?? [] as $ portKey => $ portBindings ) {
44+ if (empty ($ portBindings )) {
45+ continue ;
46+ }
47+ // PortBinding is expected by DTO for each string key
48+ $ ports [$ portKey ] = $ portBindings [0 ];
49+ }
50+
3851 return new DockerContainerDto (
39- id: $ containerInspect ->getId (),
40- name: $ containerInspect ->getName (),
41- image: $ containerInspect ->getImage (),
52+ id: ( string ) $ containerInspect ->getId (),
53+ name: ( string ) $ containerInspect ->getName (),
54+ image: ( string ) $ containerInspect ->getImage (),
4255 running: $ containerInspect ->getState ()?->getRunning() ?? false ,
4356 envVariables: $ envVariables ,
4457 ipAddresses: $ ipAddresses ,
4558 networks: $ networks ,
46- ports: ( array ) ( $ containerInspect -> getNetworkSettings ()-> getPorts () ?? []) ,
59+ ports: $ ports ,
4760 );
4861 }
4962}
0 commit comments