diff --git a/fda-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java b/fda-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java
index c072273bdcbdb5618828c14e8868905f7a1cba8b..6f9e70d7b83ae49140b5d08dfd812f28e0f44d56 100644
--- a/fda-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java
+++ b/fda-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java
@@ -3,10 +3,7 @@ package at.tuwien.endpoints;
 import at.tuwien.api.container.*;
 import at.tuwien.api.container.network.IpAddressDto;
 import at.tuwien.entities.container.Container;
-import at.tuwien.exception.ContainerNotFoundException;
-import at.tuwien.exception.ContainerStillRunningException;
-import at.tuwien.exception.DockerClientException;
-import at.tuwien.exception.ImageNotFoundException;
+import at.tuwien.exception.*;
 import at.tuwien.mapper.ContainerMapper;
 import at.tuwien.service.ContainerService;
 import io.swagger.annotations.ApiOperation;
@@ -80,14 +77,18 @@ public class ContainerEndpoint {
     public ResponseEntity<ContainerDto> findById(@NotNull @PathVariable Long id) throws DockerClientException, ContainerNotFoundException {
         final Container container = containerService.getById(id);
         final ContainerDto containerDto = containerMapper.containerToContainerDto(container);
-        containerService.findIpAddresses(container.getHash())
-                .forEach((key, value) -> containerDto.setIpAddress(IpAddressDto.builder()
-                        .ipv4(value)
-                        .build()));
+        try {
+            containerService.findIpAddresses(container.getHash())
+                    .forEach((key, value) -> containerDto.setIpAddress(IpAddressDto.builder()
+                            .ipv4(value)
+                            .build()));
+        } catch (ContainerNotRunningException e) {
+            throw new DockerClientException("Could not get container IP", e);
+        }
         final ContainerStateDto stateDto = containerService.getContainerState(container.getHash());
         try {
             containerDto.setState(stateDto);
-        } catch(NullPointerException e) {
+        } catch (NullPointerException e) {
             throw new DockerClientException("Could not get container state");
         }
         return ResponseEntity.ok()
diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/fda-container-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java
index 53f9d8c6888f98d100242106a3335ba028108df0..79658ded7b85ad530158df1cd141017838dbf8c2 100644
--- a/fda-container-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java
+++ b/fda-container-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java
@@ -1,8 +1,10 @@
 package at.tuwien;
 
 import at.tuwien.api.container.ContainerBriefDto;
+import at.tuwien.api.container.ContainerCreateRequestDto;
 import at.tuwien.api.container.ContainerDto;
 import at.tuwien.api.container.image.ImageBriefDto;
+import at.tuwien.api.container.image.ImageCreateDto;
 import at.tuwien.api.container.image.ImageDto;
 import at.tuwien.api.container.image.ImageEnvItemDto;
 import at.tuwien.api.container.network.IpAddressDto;
@@ -12,6 +14,7 @@ import at.tuwien.entities.container.image.ContainerImageEnvironmentItem;
 import com.github.dockerjava.api.command.CreateContainerCmd;
 import com.github.dockerjava.api.command.CreateContainerResponse;
 import com.github.dockerjava.core.command.CreateContainerCmdImpl;
+import com.github.dockerjava.core.exec.CreateContainerCmdExec;
 import org.springframework.test.context.TestPropertySource;
 
 import java.math.BigInteger;
@@ -48,6 +51,8 @@ public abstract class BaseUnitTest {
                     .value("postgres")
                     .build())
             .toArray(new ImageEnvItemDto[0]);
+    public final static List<String> IMAGE_1_ENVIRONMENT = List.of("POSTGRES_USER=postgres",
+            "POSTGRES_PASSWORD=postgres");
 
     public final static String IMAGE_2_REPOSITORY = "redis";
     public final static String IMAGE_2_TAG = "latest";
@@ -74,7 +79,7 @@ public abstract class BaseUnitTest {
             .toArray(new ImageEnvItemDto[0]);
 
     public final static ContainerImage IMAGE_1 = ContainerImage.builder()
-            .id(IMAGE_1_ID)
+            .id(1L)
             .repository(IMAGE_1_REPOSITORY)
             .tag(IMAGE_1_TAG)
             .hash(IMAGE_1_HASH)
@@ -117,10 +122,10 @@ public abstract class BaseUnitTest {
     public final static Long CONTAINER_1_ID = 1L;
     public final static String CONTAINER_1_HASH = "deadbeef";
     public final static ContainerImage CONTAINER_1_IMAGE = IMAGE_1;
-    public final static String CONTAINER_1_NAME = "u01";
-    public final static String CONTAINER_1_INTERNALNAME = "u01";
+    public final static String CONTAINER_1_NAME = "fda-userdb-u01";
+    public final static String CONTAINER_1_INTERNALNAME = "fda-userdb-u01";
     public final static String CONTAINER_1_DATABASE = "univie";
-    public final static String CONTAINER_1_IP = "231.145.98.83";
+    public final static String CONTAINER_1_IP = "172.28.0.5";
     public final static Instant CONTAINER_1_CREATED = Instant.now().minus(1, HOURS);
 
     public final static Long CONTAINER_2_ID = 2L;
@@ -133,7 +138,7 @@ public abstract class BaseUnitTest {
     public final static Instant CONTAINER_2_CREATED = Instant.now().minus(1, HOURS);
 
     public final static Container CONTAINER_1 = Container.builder()
-            .id(CONTAINER_1_ID)
+            .id(1L)
             .name(CONTAINER_1_NAME)
             .internalName(CONTAINER_1_INTERNALNAME)
             .image(CONTAINER_1_IMAGE)
@@ -142,7 +147,7 @@ public abstract class BaseUnitTest {
             .build();
 
     public final static Container CONTAINER_2 = Container.builder()
-            .id(CONTAINER_2_ID)
+            .id(2L)
             .name(CONTAINER_2_NAME)
             .internalName(CONTAINER_2_INTERNALNAME)
             .image(CONTAINER_2_IMAGE)
@@ -151,7 +156,6 @@ public abstract class BaseUnitTest {
             .build();
 
     public final static ContainerDto CONTAINER_1_DTO = ContainerDto.builder()
-            .id(CONTAINER_1_ID)
             .name(CONTAINER_1_NAME)
             .image(IMAGE_1_DTO)
             .hash(CONTAINER_1_HASH)
@@ -162,20 +166,17 @@ public abstract class BaseUnitTest {
             .build();
 
     public final static ContainerBriefDto CONTAINER_1_BRIEF_DTO = ContainerBriefDto.builder()
-            .id(CONTAINER_1_ID)
             .name(CONTAINER_1_NAME)
             .internalName(CONTAINER_1_INTERNALNAME)
             .hash(CONTAINER_1_HASH)
             .build();
 
     public final static ImageBriefDto IMAGE_1_BRIEFDTO = ImageBriefDto.builder()
-            .id(IMAGE_1_ID)
             .repository(IMAGE_1_REPOSITORY)
             .tag(IMAGE_1_TAG)
             .build();
 
     public final static ContainerDto CONTAINER_2_DTO = ContainerDto.builder()
-            .id(CONTAINER_2_ID)
             .name(CONTAINER_2_NAME)
             .image(IMAGE_2_DTO)
             .hash(CONTAINER_2_HASH)
@@ -192,5 +193,16 @@ public abstract class BaseUnitTest {
             .hash(CONTAINER_2_HASH)
             .build();
 
-    public final static CreateContainerResponse CONTAINER_1_RESPONSE = new CreateContainerResponse();
+    public final static ImageCreateDto IMAGE_1_CREATE_DTO = ImageCreateDto.builder()
+            .repository(IMAGE_1_REPOSITORY)
+            .tag(IMAGE_1_TAG)
+            .environment(IMAGE_1_ENV_DTO)
+            .defaultPort(IMAGE_1_PORT)
+            .build();
+
+    public final static ContainerCreateRequestDto CONTAINER_1_CREATE_DTO = ContainerCreateRequestDto.builder()
+            .repository(IMAGE_1_REPOSITORY)
+            .tag(IMAGE_1_TAG)
+            .name(CONTAINER_1_NAME)
+            .build();
 }
diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java b/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..a49855d577597eb296fd5d3a024a63681689acb0
--- /dev/null
+++ b/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java
@@ -0,0 +1,171 @@
+package at.tuwien.service;
+
+import at.tuwien.BaseUnitTest;
+import at.tuwien.api.container.ContainerCreateRequestDto;
+import at.tuwien.api.container.image.ImageCreateDto;
+import at.tuwien.entities.container.image.ContainerImage;
+import at.tuwien.exception.ContainerNotRunningException;
+import at.tuwien.exception.DockerClientException;
+import at.tuwien.repository.ContainerRepository;
+import at.tuwien.repository.ImageRepository;
+import com.github.dockerjava.api.DockerClient;
+import com.github.dockerjava.api.command.CreateContainerResponse;
+import com.github.dockerjava.api.exception.NotModifiedException;
+import com.github.dockerjava.api.model.*;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
+import javax.transaction.Transactional;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
+@ExtendWith(SpringExtension.class)
+@SpringBootTest
+public class ContainerServiceIntegrationTest extends BaseUnitTest {
+
+    @Autowired
+    private ContainerService containerService;
+
+    @Autowired
+    private ImageService imageService;
+
+    @Autowired
+    private HostConfig hostConfig;
+
+    @Autowired
+    private ImageRepository imageRepository;
+
+    @Autowired
+    private ContainerRepository containerRepository;
+
+    @Autowired
+    private DockerClient dockerClient;
+
+    @Transactional
+    @BeforeEach
+    public void beforeEach() {
+        /* create network */
+        dockerClient.createNetworkCmd()
+                .withName("fda-userdb")
+                .withInternal(true)
+                .withIpam(new Network.Ipam()
+                        .withConfig(new Network.Ipam.Config()
+                                .withSubnet("172.28.0.0/16")))
+                .withEnableIpv6(false)
+                .exec();
+        imageRepository.save(IMAGE_1);
+        /* create container */
+        final CreateContainerResponse request = dockerClient.createContainerCmd(IMAGE_1_REPOSITORY + ":" + IMAGE_1_TAG)
+                .withEnv(IMAGE_1_ENVIRONMENT)
+                .withHostConfig(hostConfig.withNetworkMode("fda-userdb")
+                        .withPortBindings(PortBinding.parse("5433:" + IMAGE_1_PORT)))
+                .withName(CONTAINER_1_NAME)
+                .withIpv4Address(CONTAINER_1_IP)
+                .withHostName(CONTAINER_1_INTERNALNAME)
+                .exec();
+        /* start container */
+        dockerClient.startContainerCmd(request.getId()).exec();
+        CONTAINER_1.setHash(request.getId());
+        containerRepository.save(CONTAINER_1);
+    }
+
+    @Transactional
+    @AfterEach
+    public void afterEach() {
+        /* stop containers and remove them */
+        dockerClient.listContainersCmd()
+                .withShowAll(true)
+                .exec()
+                .forEach(container -> {
+                    System.out.println("DELETE CONTAINER " + Arrays.toString(container.getNames()));
+                    try {
+                        dockerClient.stopContainerCmd(container.getId()).exec();
+                    } catch (NotModifiedException e) {
+                        // ignore
+                    }
+                    dockerClient.removeContainerCmd(container.getId()).exec();
+                });
+        /* remove networks */
+        dockerClient.listNetworksCmd()
+                .exec()
+                .stream()
+                .filter(n -> n.getName().startsWith("fda"))
+                .forEach(network -> {
+                    System.out.println("DELETE NETWORK " + network.getName());
+                    dockerClient.removeNetworkCmd(network.getId()).exec();
+                });
+        /* entities are deleted automatically by dirties context */
+    }
+
+    @Test
+    public void findIpAddress_succeeds() throws ContainerNotRunningException {
+
+        /* test */
+        final Map<String, String> response = containerService.findIpAddresses(CONTAINER_1.getHash());
+        assertTrue(response.containsKey("fda-userdb"));
+        assertEquals(CONTAINER_1_IP, response.get("fda-userdb"));
+    }
+
+    @Test
+    public void findIpAddress_notRunning_fails() {
+        dockerClient.startContainerCmd(CONTAINER_1.getHash());
+
+        /* test */
+        assertThrows(DockerClientException.class, () -> {
+            containerService.findIpAddresses(CONTAINER_1.getHash());
+        });
+    }
+
+    @Test
+    public void findIpAddress_notFound_fails() {
+
+    }
+
+    @Test
+    public void getContainerState_succeeds() {
+
+    }
+
+    @Test
+    public void getContainerState_notFound_fails() {
+
+    }
+
+    @Test
+    public void create_succeeds() {
+        final ImageCreateDto request = ImageCreateDto.builder()
+                .repository(IMAGE_1_REPOSITORY)
+                .tag(IMAGE_1_TAG)
+                .defaultPort(IMAGE_1_PORT)
+                .environment(IMAGE_1_ENV_DTO)
+                .build();
+    }
+
+
+    @Test
+    public void findById_docker_fails() {
+        // cannot test
+    }
+
+    @Test
+    public void change_start_succeeds() {
+        // cannot test
+    }
+
+    @Test
+    public void change_stop_succeeds() {
+        // cannot test
+    }
+
+}
diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/service/ServiceUnitTest.java b/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceUnitTest.java
similarity index 94%
rename from fda-container-service/rest-service/src/test/java/at/tuwien/service/ServiceUnitTest.java
rename to fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceUnitTest.java
index af8e6714e7d8d7728146472852379255982b6cc9..dc4f1f00b35ff12228b3bc94d3e2278fcf5055ff 100644
--- a/fda-container-service/rest-service/src/test/java/at/tuwien/service/ServiceUnitTest.java
+++ b/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceUnitTest.java
@@ -30,7 +30,7 @@ import static org.mockito.Mockito.when;
 
 @ExtendWith(SpringExtension.class)
 @SpringBootTest
-public class ServiceUnitTest extends BaseUnitTest {
+public class ContainerServiceUnitTest extends BaseUnitTest {
 
     @Autowired
     private ContainerService containerService;
@@ -124,24 +124,6 @@ public class ServiceUnitTest extends BaseUnitTest {
         });
     }
 
-    @Disabled(value = "cannot test docker api")
-    @Test
-    public void findById_docker_fails() {
-        // cannot test
-    }
-
-    @Disabled(value = "cannot test docker api")
-    @Test
-    public void change_start_succeeds() {
-        // cannot test
-    }
-
-    @Disabled(value = "cannot test docker api")
-    @Test
-    public void change_stop_succeeds() {
-        // cannot test
-    }
-
     @Test
     public void change_start_docker_fails() {
         when(containerRepository.findById(CONTAINER_1_ID))
diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java b/fda-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..929d4a4705c2789f59cd2bbd993780f0239390c6
--- /dev/null
+++ b/fda-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java
@@ -0,0 +1,166 @@
+package at.tuwien.service;
+
+import at.tuwien.BaseUnitTest;
+import at.tuwien.api.container.ContainerCreateRequestDto;
+import at.tuwien.api.container.image.ImageChangeDto;
+import at.tuwien.api.container.image.ImageCreateDto;
+import at.tuwien.entities.container.Container;
+import at.tuwien.entities.container.image.ContainerImage;
+import at.tuwien.exception.*;
+import at.tuwien.repository.ContainerRepository;
+import at.tuwien.repository.ImageRepository;
+import com.github.dockerjava.api.DockerClient;
+import com.github.dockerjava.api.exception.ConflictException;
+import com.github.dockerjava.api.exception.NotFoundException;
+import com.github.dockerjava.api.exception.NotModifiedException;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
+import javax.persistence.EntityNotFoundException;
+import java.util.List;
+import java.util.Optional;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.*;
+
+@ExtendWith(SpringExtension.class)
+@SpringBootTest
+public class ImageServiceUnitTest extends BaseUnitTest {
+
+    @Autowired
+    private ImageService imageService;
+
+    @MockBean
+    private ImageRepository imageRepository;
+
+    @Test
+    public void getAll_succeeds() {
+        when(imageRepository.findAll())
+                .thenReturn(List.of(IMAGE_1, IMAGE_2));
+
+        /* test */
+        final List<ContainerImage> response = imageService.getAll();
+        assertEquals(2, response.size());
+        assertEquals(IMAGE_1_REPOSITORY, response.get(0).getRepository());
+        assertEquals(IMAGE_1_TAG, response.get(0).getTag());
+        assertEquals(IMAGE_2_REPOSITORY, response.get(1).getRepository());
+        assertEquals(IMAGE_2_TAG, response.get(1).getTag());
+    }
+
+    @Test
+    public void getById_succeeds() {
+        when(imageRepository.findById(IMAGE_1_ID))
+                .thenReturn(Optional.of(IMAGE_1));
+
+        /* test */
+        final ContainerImage response = imageService.getById(IMAGE_1_ID);
+        assertEquals(IMAGE_1_REPOSITORY, response.getRepository());
+        assertEquals(IMAGE_1_TAG, response.getTag());
+    }
+
+    @Test
+    public void getById_notFound_fails() {
+        when(imageRepository.findById(IMAGE_1_ID))
+                .thenReturn(Optional.empty());
+
+        /* test */
+        assertThrows(ImageNotFoundException.class, () -> {
+            imageService.getById(IMAGE_1_ID);
+        });
+    }
+
+    @Test
+    public void create_notFound_fails() {
+        final ImageCreateDto request = ImageCreateDto.builder()
+                .repository(IMAGE_1_REPOSITORY)
+                .tag(IMAGE_1_TAG)
+                .defaultPort(IMAGE_1_PORT)
+                .environment(IMAGE_1_ENV_DTO)
+                .build();
+        when(imageService.create(request))
+                .thenThrow(ImageNotFoundException.class);
+
+        /* test */
+        assertThrows(ImageNotFoundException.class, () -> {
+            imageService.create(request);
+        });
+    }
+
+    @Test
+    public void create_duplicate_fails() {
+        final ImageCreateDto request = ImageCreateDto.builder()
+                .repository(IMAGE_1_REPOSITORY)
+                .tag(IMAGE_1_TAG)
+                .defaultPort(IMAGE_1_PORT)
+                .environment(IMAGE_1_ENV_DTO)
+                .build();
+        when(imageService.create(request))
+                .thenThrow(ImageAlreadyExistsException.class);
+
+        /* test */
+        assertThrows(ImageAlreadyExistsException.class, () -> {
+            imageService.create(request);
+        });
+    }
+
+    @Test
+    public void update_succeeds() {
+        final ImageChangeDto request = ImageChangeDto.builder()
+                .environment(IMAGE_1_ENV_DTO)
+                .defaultPort(IMAGE_1_PORT)
+                .build();
+        when(imageRepository.findById(IMAGE_1_ID))
+                .thenReturn(Optional.of(IMAGE_1));
+        when(imageRepository.save(any()))
+                .thenReturn(IMAGE_1);
+
+        /* test */
+        final ContainerImage response = imageService.update(IMAGE_1_ID, request);
+        assertEquals(IMAGE_1_REPOSITORY, response.getRepository());
+        assertEquals(IMAGE_1_TAG, response.getTag());
+    }
+
+    @Test
+    public void update_notFound_fails() {
+        final ImageChangeDto request = ImageChangeDto.builder()
+                .environment(IMAGE_1_ENV_DTO)
+                .defaultPort(IMAGE_1_PORT)
+                .build();
+        when(imageRepository.findById(IMAGE_1_ID))
+                .thenReturn(Optional.empty());
+
+        /* test */
+        assertThrows(ImageNotFoundException.class, () -> {
+            imageService.update(IMAGE_1_ID, request);
+        });
+    }
+
+    @Test
+    public void delete_succeeds() {
+        doNothing()
+                .when(imageRepository)
+                .deleteById(IMAGE_1_ID);
+
+        /* test */
+        imageService.delete(IMAGE_1_ID);
+    }
+
+    @Test
+    public void delete_notFound_fails() {
+        doThrow(EntityNotFoundException.class)
+                .when(imageRepository)
+                .deleteById(IMAGE_1_ID);
+
+        /* test */
+        assertThrows(ImageNotFoundException.class, () -> {
+            imageService.delete(IMAGE_1_ID);
+        });
+    }
+}
diff --git a/fda-container-service/services/src/main/java/at/tuwien/exception/ContainerNotRunningException.java b/fda-container-service/services/src/main/java/at/tuwien/exception/ContainerNotRunningException.java
new file mode 100644
index 0000000000000000000000000000000000000000..2ce6427319bcfb5c73ad52da8912d12667625b98
--- /dev/null
+++ b/fda-container-service/services/src/main/java/at/tuwien/exception/ContainerNotRunningException.java
@@ -0,0 +1,17 @@
+package at.tuwien.exception;
+
+public class ContainerNotRunningException extends Exception {
+
+    public ContainerNotRunningException(String message) {
+        super(message);
+    }
+
+    public ContainerNotRunningException(String message, Throwable thr) {
+        super(message, thr);
+    }
+
+    public ContainerNotRunningException(Throwable thr) {
+        super(thr);
+    }
+
+}
diff --git a/fda-container-service/services/src/main/java/at/tuwien/mapper/ImageMapper.java b/fda-container-service/services/src/main/java/at/tuwien/mapper/ImageMapper.java
index 666b36e8953853e90d473beffda88468c581f901..c86cc8e0cb146cf267fbef2f349e8b2b396cdf1d 100644
--- a/fda-container-service/services/src/main/java/at/tuwien/mapper/ImageMapper.java
+++ b/fda-container-service/services/src/main/java/at/tuwien/mapper/ImageMapper.java
@@ -25,6 +25,7 @@ public interface ImageMapper {
     @Mappings({
             @Mapping(source = "id", target = "hash"),
             @Mapping(source = "created", target = "compiled"),
+            @Mapping(target = "id", ignore = true),
             @Mapping(target = "repository", expression = "java(data.getRepoTags().get(0).substring(0,data.getRepoTags().get(0).indexOf(\":\")))"),
             @Mapping(target = "tag", expression = "java(data.getRepoTags().get(0).substring(data.getRepoTags().get(0).indexOf(\":\")+1))"),
     })
diff --git a/fda-container-service/services/src/main/java/at/tuwien/service/ContainerService.java b/fda-container-service/services/src/main/java/at/tuwien/service/ContainerService.java
index 90a91128a72a28fc3291e968dde8e6feb84cd53a..7234d751c9d6bea53ab10d3343a16d78282395b9 100644
--- a/fda-container-service/services/src/main/java/at/tuwien/service/ContainerService.java
+++ b/fda-container-service/services/src/main/java/at/tuwien/service/ContainerService.java
@@ -5,10 +5,7 @@ import at.tuwien.api.container.ContainerDto;
 import at.tuwien.api.container.ContainerStateDto;
 import at.tuwien.entities.container.Container;
 import at.tuwien.entities.container.image.ContainerImage;
-import at.tuwien.exception.ContainerNotFoundException;
-import at.tuwien.exception.ContainerStillRunningException;
-import at.tuwien.exception.DockerClientException;
-import at.tuwien.exception.ImageNotFoundException;
+import at.tuwien.exception.*;
 import at.tuwien.mapper.ContainerMapper;
 import at.tuwien.mapper.ImageMapper;
 import at.tuwien.repository.ContainerRepository;
@@ -27,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.SocketUtils;
 
+import javax.transaction.Transactional;
 import java.time.Instant;
 import java.util.HashMap;
 import java.util.List;
@@ -56,6 +54,7 @@ public class ContainerService {
         this.imageMapper = imageMapper;
     }
 
+    @Transactional
     public Container create(ContainerCreateRequestDto createDto) throws ImageNotFoundException, DockerClientException {
         final Optional<ContainerImage> image = imageRepository.findByRepositoryAndTag(createDto.getRepository(), createDto.getTag());
         if (image.isEmpty()) {
@@ -159,7 +158,7 @@ public class ContainerService {
         return container;
     }
 
-    public Map<String, String> findIpAddresses(String containerHash) throws ContainerNotFoundException {
+    public Map<String, String> findIpAddresses(String containerHash) throws ContainerNotFoundException, ContainerNotRunningException {
         final InspectContainerResponse response;
         try {
             response = dockerClient.inspectContainerCmd(containerHash)
@@ -169,6 +168,10 @@ public class ContainerService {
             throw new ContainerNotFoundException("container not found", e);
         }
         final Map<String, String> networks = new HashMap<>();
+        if (!response.getState().getRunning()) {
+            log.warn("cannot get IPv4 of container that is not running");
+            throw new ContainerNotRunningException("container is not running");
+        }
         response.getNetworkSettings()
                 .getNetworks()
                 .forEach((key, value) -> {
diff --git a/fda-container-service/services/src/main/java/at/tuwien/service/ImageService.java b/fda-container-service/services/src/main/java/at/tuwien/service/ImageService.java
index 34218c4ed6de52962f520fcfd838b63198beb06d..8125e13b1533b013fcc6e928a626afcead1fd8d9 100644
--- a/fda-container-service/services/src/main/java/at/tuwien/service/ImageService.java
+++ b/fda-container-service/services/src/main/java/at/tuwien/service/ImageService.java
@@ -91,14 +91,14 @@ public class ImageService {
         return imageRepository.save(image);
     }
 
-    public void delete(Long databaseId) throws ImageNotFoundException {
+    public void delete(Long id) throws ImageNotFoundException {
         try {
-            imageRepository.deleteById(databaseId);
+            imageRepository.deleteById(id);
         } catch (EntityNotFoundException | EmptyResultDataAccessException e) {
-            log.error("image id {} not found in metadata database", databaseId);
+            log.error("image id {} not found in metadata database", id);
             throw new ImageNotFoundException("no image with this id found in metadata database.");
         }
-        log.info("deleted image with id {}", databaseId);
+        log.info("deleted image with id {}", id);
     }
 
     /** HELPER FUNCTIONS */
diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java
index c7e5618eee2169f08487408173f5799bec2b26ee..a7a80ba41d4c929cfb1925f042bc8e9effd21037 100644
--- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java
+++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java
@@ -53,7 +53,7 @@ public class Container {
     private Integer port;
 
     @ToString.Include
-    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
+    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.DETACH)
     private ContainerImage image;
 
     @Column(nullable = false, updatable = false)
diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java
index f37e071e389456e1b5c48adb926228fcad0fdace..da9c5eb78246158b0a661efc0d9f5383a47af521 100644
--- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java
+++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java
@@ -58,7 +58,7 @@ public class ContainerImage {
     private Integer defaultPort;
 
     @ToString.Include
-    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
     private List<ContainerImageEnvironmentItem> environment;
 
     @Column(nullable = false, updatable = false)