Skip to content

Commit 8d83776

Browse files
fix(docker): add SELinux labeling to bind mounts (#1291)
1 parent 072f227 commit 8d83776

2 files changed

Lines changed: 20 additions & 26 deletions

File tree

‎crates/openshell-driver-docker/src/lib.rs‎

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ use bollard::Docker;
99
use bollard::errors::Error as BollardError;
1010
use bollard::models::{
1111
ContainerCreateBody, ContainerSummary, ContainerSummaryStateEnum, DeviceRequest,
12-
EndpointSettings, HostConfig, Mount, MountTypeEnum, NetworkCreateRequest, NetworkingConfig,
13-
RestartPolicy, RestartPolicyNameEnum, SystemInfo,
12+
EndpointSettings, HostConfig, NetworkCreateRequest, NetworkingConfig, RestartPolicy,
13+
RestartPolicyNameEnum, SystemInfo,
1414
};
1515
use bollard::query_parameters::{
1616
CreateContainerOptionsBuilder, CreateImageOptions, DownloadFromContainerOptionsBuilder,
@@ -865,28 +865,22 @@ impl ComputeDriver for DockerComputeDriver {
865865
}
866866
}
867867

868-
fn build_mounts(config: &DockerDriverRuntimeConfig) -> Vec<Mount> {
869-
let mut mounts = vec![bind_mount(
870-
&config.supervisor_bin,
871-
SUPERVISOR_MOUNT_PATH,
872-
true,
868+
fn build_binds(config: &DockerDriverRuntimeConfig) -> Vec<String> {
869+
let mut binds = vec![format!(
870+
"{}:{}:ro,z",
871+
config.supervisor_bin.display(),
872+
SUPERVISOR_MOUNT_PATH
873873
)];
874874
if let Some(tls) = &config.guest_tls {
875-
mounts.push(bind_mount(&tls.ca, TLS_CA_MOUNT_PATH, true));
876-
mounts.push(bind_mount(&tls.cert, TLS_CERT_MOUNT_PATH, true));
877-
mounts.push(bind_mount(&tls.key, TLS_KEY_MOUNT_PATH, true));
878-
}
879-
mounts
880-
}
881-
882-
fn bind_mount(source: &Path, target: &str, read_only: bool) -> Mount {
883-
Mount {
884-
target: Some(target.to_string()),
885-
source: Some(source.display().to_string()),
886-
typ: Some(MountTypeEnum::BIND),
887-
read_only: Some(read_only),
888-
..Default::default()
875+
binds.push(format!("{}:{}:ro,z", tls.ca.display(), TLS_CA_MOUNT_PATH));
876+
binds.push(format!(
877+
"{}:{}:ro,z",
878+
tls.cert.display(),
879+
TLS_CERT_MOUNT_PATH
880+
));
881+
binds.push(format!("{}:{}:ro,z", tls.key.display(), TLS_KEY_MOUNT_PATH));
889882
}
883+
binds
890884
}
891885

892886
fn build_environment(sandbox: &DriverSandbox, config: &DockerDriverRuntimeConfig) -> Vec<String> {
@@ -999,7 +993,7 @@ fn build_container_create_body(
999993
nano_cpus: resource_limits.nano_cpus,
1000994
memory: resource_limits.memory_bytes,
1001995
device_requests: docker_gpu_device_requests(spec.gpu),
1002-
mounts: Some(build_mounts(config)),
996+
binds: Some(build_binds(config)),
1003997
restart_policy: Some(RestartPolicy {
1004998
name: Some(RestartPolicyNameEnum::UNLESS_STOPPED),
1005999
maximum_retry_count: None,

‎crates/openshell-driver-docker/src/tests.rs‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -317,11 +317,11 @@ fn build_environment_keeps_path_driver_controlled() {
317317
}
318318

319319
#[test]
320-
fn build_mounts_uses_docker_tls_directory() {
321-
let mounts = build_mounts(&runtime_config());
322-
let targets = mounts
320+
fn build_binds_uses_docker_tls_directory() {
321+
let binds = build_binds(&runtime_config());
322+
let targets = binds
323323
.iter()
324-
.filter_map(|mount| mount.target.clone())
324+
.filter_map(|bind| bind.split(':').nth(1).map(String::from))
325325
.collect::<Vec<_>>();
326326
assert!(targets.contains(&SUPERVISOR_MOUNT_PATH.to_string()));
327327
assert!(targets.contains(&TLS_CA_MOUNT_PATH.to_string()));

0 commit comments

Comments
 (0)