Skip to content
Snippets Groups Projects
Unverified Commit 80fad43e authored by Martin Weise's avatar Martin Weise
Browse files

Fixed tests for container service

parent 94f0ea81
No related branches found
No related tags found
1 merge request!106Dev
......@@ -8,6 +8,8 @@ import at.tuwien.entities.container.image.ContainerImageEnvironmentItem;
import at.tuwien.entities.container.image.ContainerImageEnvironmentItemType;
import at.tuwien.entities.user.RoleType;
import at.tuwien.entities.user.User;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.test.context.TestPropertySource;
import java.time.Instant;
......@@ -24,6 +26,7 @@ public abstract class BaseUnitTest {
public final static Boolean USER_1_THEME_DARK = false;
public final static String USER_1_PASSWORD = "p455w0rdh45h";
public final static RoleType USER_1_ROLE_TYPE = RoleType.ROLE_RESEARCHER;
public final static GrantedAuthority USER_1_AUTHORITY = new SimpleGrantedAuthority("ROLE_RESEARCHER");
public final static User USER_1 = User.builder()
.username(USER_1_USERNAME)
......@@ -34,6 +37,55 @@ public abstract class BaseUnitTest {
.roles(List.of(USER_1_ROLE_TYPE))
.build();
public final static String USER_2_USERNAME = "dev";
public final static String USER_2_EMAIL = "dev@gmail.com";
public final static Boolean USER_2_EMAIL_VERIFIED = false;
public final static Boolean USER_2_THEME_DARK = false;
public final static String USER_2_PASSWORD = "p455w0rdh45";
public final static RoleType USER_2_ROLE_TYPE = RoleType.ROLE_DEVELOPER;
public final static GrantedAuthority USER_2_AUTHORITY = new SimpleGrantedAuthority("ROLE_DEVELOPER");
public final static User USER_2 = User.builder()
.username(USER_2_USERNAME)
.email(USER_2_EMAIL)
.emailVerified(USER_2_EMAIL_VERIFIED)
.themeDark(USER_2_THEME_DARK)
.password(USER_2_PASSWORD)
.roles(List.of(USER_2_ROLE_TYPE))
.build();
public final static String USER_3_USERNAME = "steward";
public final static String USER_3_EMAIL = "steward@gmail.com";
public final static Boolean USER_3_EMAIL_VERIFIED = false;
public final static Boolean USER_3_THEME_DARK = false;
public final static String USER_3_PASSWORD = "p455w0rdh45";
public final static RoleType USER_3_ROLE_TYPE = RoleType.ROLE_DATA_STEWARD;
public final static GrantedAuthority USER_3_AUTHORITY = new SimpleGrantedAuthority("ROLE_DATA_STEWARD");
public final static User USER_3 = User.builder()
.username(USER_3_USERNAME)
.email(USER_3_EMAIL)
.emailVerified(USER_3_EMAIL_VERIFIED)
.themeDark(USER_3_THEME_DARK)
.password(USER_3_PASSWORD)
.roles(List.of(USER_3_ROLE_TYPE))
.build();
public final static String USER_4_USERNAME = "nobody";
public final static String USER_4_EMAIL = "nobody@gmail.com";
public final static Boolean USER_4_EMAIL_VERIFIED = false;
public final static Boolean USER_4_THEME_DARK = false;
public final static String USER_4_PASSWORD = "p455w0rdh45";
public final static User USER_4 = User.builder()
.username(USER_4_USERNAME)
.email(USER_4_EMAIL)
.emailVerified(USER_4_EMAIL_VERIFIED)
.themeDark(USER_4_THEME_DARK)
.password(USER_4_PASSWORD)
.roles(List.of())
.build();
public final static Long IMAGE_1_ID = 1L;
public final static String IMAGE_1_REPOSITORY = "mariadb";
public final static String IMAGE_1_TAG = "10.5";
......
package at.tuwien.config;
import at.tuwien.BaseUnitTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import java.util.List;
@Configuration
public class SecurityConfig extends BaseUnitTest {
@Autowired
private PasswordEncoder passwordEncoder;
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public UserDetailsService userDetailsService() {
return new InMemoryUserDetailsManager(List.of(
new User(USER_1_USERNAME, passwordEncoder.encode(USER_1_PASSWORD), List.of(USER_1_AUTHORITY)),
new User(USER_2_USERNAME, passwordEncoder.encode(USER_2_PASSWORD), List.of(USER_2_AUTHORITY)),
new User(USER_3_USERNAME, passwordEncoder.encode(USER_3_PASSWORD), List.of(USER_3_AUTHORITY)),
new User(USER_4_USERNAME, passwordEncoder.encode(USER_4_PASSWORD), List.of())
));
}
}
......@@ -2,12 +2,11 @@ package at.tuwien.endpoint;
import at.tuwien.BaseUnitTest;
import at.tuwien.api.container.*;
import at.tuwien.auth.PermissionEvaluatorImpl;
import at.tuwien.config.ReadyConfig;
import at.tuwien.endpoints.ContainerEndpoint;
import at.tuwien.exception.*;
import at.tuwien.repository.jpa.ContainerRepository;
import at.tuwien.repository.jpa.ImageRepository;
import at.tuwien.repository.jpa.UserRepository;
import at.tuwien.service.impl.ContainerServiceImpl;
import org.apache.http.auth.BasicUserPrincipal;
import org.junit.jupiter.api.Test;
......@@ -15,19 +14,14 @@ 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.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.authentication.AuthenticationCredentialsNotFoundException;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.security.test.context.support.WithUserDetails;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import java.security.Principal;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.*;
......@@ -42,10 +36,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
private ImageRepository imageRepository;
@MockBean
private ContainerRepository containerRepository;
@MockBean
private PermissionEvaluatorImpl permissionEvaluator;
private UserRepository userRepository;
@Autowired
private ContainerEndpoint containerEndpoint;
......@@ -54,227 +45,130 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
private ContainerServiceImpl containerService;
@Test
public void listAllDatabases_succeeds() {
when(containerService.getAll())
.thenReturn(List.of(CONTAINER_1));
final ResponseEntity<List<ContainerBriefDto>> response = containerEndpoint.findAll(null);
/* test */
assertEquals(HttpStatus.OK, response.getStatusCode());
assertEquals(1, Objects.requireNonNull(response.getBody()).size());
}
@Test
@WithMockUser(roles = "RESEARCHER")
public void create_succeeds() throws ImageNotFoundException, DockerClientException, UserNotFoundException, ContainerAlreadyExistsException {
public void create_noAuth_fails() {
final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder()
.name(CONTAINER_1_NAME)
.repository(IMAGE_1.getRepository())
.tag(IMAGE_1.getTag())
.repository(IMAGE_1_REPOSITORY)
.tag(IMAGE_1_TAG)
.build();
final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
/* mock */
when(containerService.create(request, principal))
.thenReturn(CONTAINER_1);
final ResponseEntity<ContainerBriefDto> response = containerEndpoint.create(request, principal);
when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
.thenReturn(Optional.of(IMAGE_1));
when(userRepository.findByUsername(USER_1_USERNAME))
.thenReturn(Optional.of(USER_1));
/* test */
assertEquals(HttpStatus.CREATED, response.getStatusCode());
assertEquals(CONTAINER_1_NAME, Objects.requireNonNull(response.getBody()).getName());
assertThrows(AuthenticationCredentialsNotFoundException.class, () -> {
containerEndpoint.create(request, null);
});
}
@Test
@WithMockUser(roles = "RESEARCHER")
public void create_noImage_fails() {
@WithUserDetails(USER_4_USERNAME)
public void create_notRole_fails() {
final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder()
.name(CONTAINER_1_NAME)
.repository(IMAGE_1_REPOSITORY)
.tag(IMAGE_1_TAG)
.build();
final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
final Principal principal = new BasicUserPrincipal(USER_4_USERNAME);
/* mock */
when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
.thenReturn(Optional.empty());
.thenReturn(Optional.of(IMAGE_1));
when(userRepository.findByUsername(USER_1_USERNAME))
.thenReturn(Optional.of(USER_1));
assertThrows(ImageNotFoundException.class, () -> {
/* test */
assertThrows(AccessDeniedException.class, () -> {
containerEndpoint.create(request, principal);
});
}
@Test
public void create_noAuth_fails() {
@WithUserDetails(USER_2_USERNAME)
public void create_notResearcher_fails() {
final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder()
.name(CONTAINER_1_NAME)
.repository(IMAGE_1_REPOSITORY)
.tag(IMAGE_1_TAG)
.build();
final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
final Principal principal = new BasicUserPrincipal(USER_2_USERNAME);
assertThrows(AuthenticationCredentialsNotFoundException.class, () -> {
containerEndpoint.create(request, principal);
});
}
@Test
public void findById_succeeds() throws ContainerNotFoundException, DockerClientException, ContainerNotRunningException {
when(containerService.find(CONTAINER_1_ID))
.thenReturn(CONTAINER_1);
/* test */
final ResponseEntity<ContainerDto> response = containerEndpoint.findById(CONTAINER_1_ID);
assertEquals(HttpStatus.OK, response.getStatusCode());
}
@Test
public void findById_notFound_fails() throws ContainerNotFoundException, DockerClientException, ContainerNotRunningException {
doThrow(ContainerNotFoundException.class)
.when(containerService)
.inspect(CONTAINER_1_ID);
/* test */
assertThrows(ContainerNotFoundException.class, () -> {
containerEndpoint.findById(CONTAINER_1_ID);
});
}
@Test
public void findById_docker_fails() throws ContainerNotFoundException, DockerClientException, ContainerNotRunningException {
doThrow(DockerClientException.class)
.when(containerService)
.inspect(CONTAINER_1_ID);
/* test */
assertThrows(DockerClientException.class, () -> {
containerEndpoint.findById(CONTAINER_1_ID);
});
}
@Test
public void findById_notRunning_fails() throws ContainerNotFoundException, DockerClientException, ContainerNotRunningException {
doThrow(ContainerNotRunningException.class)
.when(containerService)
.inspect(CONTAINER_1_ID);
/* mock */
when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
.thenReturn(Optional.of(IMAGE_1));
when(userRepository.findByUsername(USER_1_USERNAME))
.thenReturn(Optional.of(USER_1));
/* test */
assertThrows(ContainerNotRunningException.class, () -> {
containerEndpoint.findById(CONTAINER_1_ID);
assertThrows(AccessDeniedException.class, () -> {
containerEndpoint.create(request, principal);
});
}
@Test
@WithMockUser(roles = "RESEARCHER")
public void modify_start_succeeds() throws DockerClientException, ContainerNotFoundException {
final ContainerChangeDto request = ContainerChangeDto.builder()
.action(ContainerActionTypeDto.START)
.build();
when(containerService.start(CONTAINER_1_ID))
.thenReturn(CONTAINER_1);
/* test */
final ResponseEntity<ContainerBriefDto> response = containerEndpoint.modify(CONTAINER_1_ID, request);
assertEquals(HttpStatus.ACCEPTED, response.getStatusCode());
assertEquals(CONTAINER_1_ID, Objects.requireNonNull(response.getBody()).getId());
}
@Test
@WithMockUser(roles = "RESEARCHER")
public void modify_stop_succeeds() throws DockerClientException, ContainerNotFoundException, ContainerStillRunningException {
final ContainerChangeDto request = ContainerChangeDto.builder()
.action(ContainerActionTypeDto.STOP)
@WithUserDetails(USER_3_USERNAME)
public void create_notResearcher2_fails() {
final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder()
.name(CONTAINER_1_NAME)
.repository(IMAGE_1_REPOSITORY)
.tag(IMAGE_1_TAG)
.build();
when(containerService.stop(CONTAINER_1_ID))
.thenReturn(CONTAINER_1);
/* test */
final ResponseEntity<ContainerBriefDto> response = containerEndpoint.modify(CONTAINER_1_ID, request);
assertEquals(HttpStatus.ACCEPTED, response.getStatusCode());
assertEquals(CONTAINER_1_ID, Objects.requireNonNull(response.getBody()).getId());
}
final Principal principal = new BasicUserPrincipal(USER_3_USERNAME);
@Test
@WithMockUser(roles = "RESEARCHER")
public void modify_startDocker_fails() throws DockerClientException, ContainerNotFoundException {
final ContainerChangeDto request = ContainerChangeDto.builder()
.action(ContainerActionTypeDto.START)
.build();
when(containerService.start(CONTAINER_1_ID))
.thenThrow(DockerClientException.class);
/* mock */
when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
.thenReturn(Optional.of(IMAGE_1));
when(userRepository.findByUsername(USER_1_USERNAME))
.thenReturn(Optional.of(USER_1));
/* test */
assertThrows(DockerClientException.class, () -> {
containerEndpoint.modify(CONTAINER_1_ID, request);
assertThrows(AccessDeniedException.class, () -> {
containerEndpoint.create(request, principal);
});
}
@Test
@WithMockUser(roles = "RESEARCHER")
public void modify_stopDocker_fails() throws DockerClientException, ContainerNotFoundException {
final ContainerChangeDto request = ContainerChangeDto.builder()
.action(ContainerActionTypeDto.STOP)
@WithUserDetails(USER_1_USERNAME)
public void create_noImage_fails() {
final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder()
.name(CONTAINER_1_NAME)
.repository(IMAGE_1_REPOSITORY)
.tag(IMAGE_1_TAG)
.build();
when(containerService.stop(CONTAINER_1_ID))
.thenThrow(DockerClientException.class);
/* test */
assertThrows(DockerClientException.class, () -> {
containerEndpoint.modify(CONTAINER_1_ID, request);
});
}
final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
@Test
@WithMockUser(roles = "RESEARCHER")
public void modify_stopNoContainer_fails() throws DockerClientException, ContainerNotFoundException {
final ContainerChangeDto request = ContainerChangeDto.builder()
.action(ContainerActionTypeDto.STOP)
.build();
when(containerService.stop(CONTAINER_1_ID))
.thenThrow(ContainerNotFoundException.class);
/* mock */
when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
.thenReturn(Optional.empty());
/* test */
assertThrows(ContainerNotFoundException.class, () -> {
containerEndpoint.modify(CONTAINER_1_ID, request);
assertThrows(ImageNotFoundException.class, () -> {
containerEndpoint.create(request, principal);
});
}
@Test
@WithMockUser(roles = "DEVELOPER")
public void delete_noContainer_fails() {
doReturn(true)
.when(permissionEvaluator)
.hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER"));
public void findAll_noAuth_fails() {
/* mock */
when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
.thenReturn(Optional.empty());
/* test */
assertThrows(ContainerNotFoundException.class, () -> {
containerEndpoint.delete(CONTAINER_1_ID);
});
containerEndpoint.findAll(null);
}
@Test
@WithMockUser(roles = "DEVELOPER")
public void delete_success() throws DockerClientException, ContainerStillRunningException, ContainerNotFoundException {
doReturn(true)
.when(permissionEvaluator)
.hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER"));
/* mock */
when(containerRepository.findById(CONTAINER_1_ID))
.thenReturn(Optional.of(CONTAINER_1));
@WithUserDetails(USER_4_USERNAME)
public void findAll_noRole_succeeds() {
final Principal principal = new BasicUserPrincipal(USER_4_USERNAME);
/* test */
final ResponseEntity<?> response = containerEndpoint.delete(CONTAINER_1_ID);
assertEquals(HttpStatus.OK, response.getStatusCode());
containerEndpoint.findAll(principal);
}
@Test
@WithMockUser(roles = "RESEARCHER")
@WithUserDetails(USER_1_USERNAME)
public void delete_notDeveloper_fails() {
doReturn(true)
.when(permissionEvaluator)
.hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER"));
/* test */
assertThrows(AccessDeniedException.class, () -> {
......@@ -283,27 +177,11 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
}
@Test
@WithMockUser(roles = "DEVELOPER")
public void delete_docker_fails() {
doReturn(true)
.when(permissionEvaluator)
.hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER"));
@WithUserDetails(USER_1_USERNAME)
public void delete_noRoles_fails() {
/* test */
assertThrows(DockerClientException.class, () -> {
containerEndpoint.delete(CONTAINER_1_ID);
});
}
@Test
@WithMockUser(roles = "DEVELOPER")
public void delete_dockerStillRunning_fails() {
doReturn(true)
.when(permissionEvaluator)
.hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER"));
/* test */
assertThrows(ContainerStillRunningException.class, () -> {
assertThrows(AccessDeniedException.class, () -> {
containerEndpoint.delete(CONTAINER_1_ID);
});
}
......
......@@ -65,7 +65,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
@Autowired
private DockerUtil dockerUtil;
@Transactional
@BeforeEach
public void beforeEach() {
afterEach();
......@@ -106,7 +105,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
containerRepository.save(CONTAINER_2);
}
@Transactional
@AfterEach
public void afterEach() {
/* stop containers and remove them */
......
{
"Id": "37e0b9e40c004e8765fcfcd8830c8b29988fb5f3e847ad2e822b73759a938bdb",
"Created": "2022-11-16T16:55:46.906703156Z",
"Path": "docker-entrypoint.sh",
"Args": [
"mysqld"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 0,
"ExitCode": 0,
"Error": "",
"StartedAt": "0001-01-01T00:00:00Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:61ff56a02874cff48f63dd41974a64ecb00305e98f56f011da318079ab3a2aca",
"ResolvConfPath": "",
"HostnamePath": "",
"HostsPath": "",
"LogPath": "",
"Name": "/dbrepo-userdb-fda-userdb-u01",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": [
"/tmp:/tmp:rw",
"dbrepo-userdb-fda-userdb-u01:/var/lib/mysql:rw"
],
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "userdb",
"PortBindings": {
"5432/tcp": [
{
"HostIp": "",
"HostPort": "32125"
}
]
},
"RestartPolicy": {
"Name": "always",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"CgroupnsMode": "host",
"Dns": null,
"DnsOptions": null,
"DnsSearch": null,
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "private",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": null,
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": null,
"DeviceCgroupRules": null,
"DeviceRequests": null,
"KernelMemory": 0,
"KernelMemoryTCP": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": null,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"MaskedPaths": [
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/8a99e2be7f5bf6dec6f797f4d56f18ecd3da3c89618f5550a6ecafe9a4589ff2-init/diff:/var/lib/docker/overlay2/cb0b45ec25ff19bffbe3320ce72fbd9eb3a8c368277f5f059468043b2c329ed4/diff:/var/lib/docker/overlay2/919eb80e1f4e8923c5bd2386edcfd9a808971a11425d11101cf8ae7c800b08e7/diff:/var/lib/docker/overlay2/2fc5924ce3479c8d0e5786ee3a30d75a88683e8b6020b3350347de8217939305/diff:/var/lib/docker/overlay2/aeea12f97f79b33bc9d1533ebd69d474cb0e1251ba56690436bd12f56b3fdb74/diff:/var/lib/docker/overlay2/b0c45a33f5faf53ceb77f855b2edcbf005206af8fc3a6a80b1bb1215a1e8675e/diff:/var/lib/docker/overlay2/fb57deba6dcfda2684dbc39114e38eea34c27caca64960b7f16e1a6ffa7338ba/diff:/var/lib/docker/overlay2/bb27c7e4ba3673f3d06e2dbca624a55b93ae4996682fa572c3e8aa1ede6c341d/diff:/var/lib/docker/overlay2/f2b38526a2e3ba96ec37b2fd3348ae6b257a2c896e98b8bd02aaf460d8e8b168/diff",
"MergedDir": "/var/lib/docker/overlay2/8a99e2be7f5bf6dec6f797f4d56f18ecd3da3c89618f5550a6ecafe9a4589ff2/merged",
"UpperDir": "/var/lib/docker/overlay2/8a99e2be7f5bf6dec6f797f4d56f18ecd3da3c89618f5550a6ecafe9a4589ff2/diff",
"WorkDir": "/var/lib/docker/overlay2/8a99e2be7f5bf6dec6f797f4d56f18ecd3da3c89618f5550a6ecafe9a4589ff2/work"
},
"Name": "overlay2"
},
"Mounts": [
{
"Type": "bind",
"Source": "/tmp",
"Destination": "/tmp",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
},
{
"Type": "volume",
"Name": "dbrepo-userdb-fda-userdb-u01",
"Source": "/var/lib/docker/volumes/dbrepo-userdb-fda-userdb-u01/_data",
"Destination": "/var/lib/mysql",
"Driver": "local",
"Mode": "rw",
"RW": true,
"Propagation": ""
}
],
"Config": {
"Hostname": "dbrepo-userdb-fda-userdb-u01",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"3306/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"MARIADB_USER=mariadb",
"MARIADB_PASSWORD=mariadb",
"MARIADB_ROOT_PASSWORD=mariadb",
"UZERNAME=root",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"GOSU_VERSION=1.14",
"LANG=C.UTF-8",
"MARIADB_MAJOR=10.5",
"MARIADB_VERSION=1:10.5.18+maria~ubu2004"
],
"Cmd": [
"mysqld"
],
"Image": "mariadb:10.5",
"Volumes": {
"/var/lib/mysql": {}
},
"WorkingDir": "",
"Entrypoint": [
"docker-entrypoint.sh"
],
"OnBuild": null,
"Labels": {
"org.opencontainers.image.authors": "MariaDB Community",
"org.opencontainers.image.base.name": "docker.io/library/ubuntu:focal",
"org.opencontainers.image.description": "MariaDB Database for relational SQL",
"org.opencontainers.image.documentation": "https://hub.docker.com/_/mariadb/",
"org.opencontainers.image.licenses": "GPL-2.0",
"org.opencontainers.image.source": "https://github.com/MariaDB/mariadb-docker",
"org.opencontainers.image.title": "MariaDB Database",
"org.opencontainers.image.url": "https://github.com/MariaDB/mariadb-docker",
"org.opencontainers.image.vendor": "MariaDB Community",
"org.opencontainers.image.version": "10.5.18"
}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "",
"Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"MacAddress": "",
"Networks": {
"userdb": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "",
"EndpointID": "",
"Gateway": "",
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "",
"DriverOpts": null
}
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment