Add sandbox_add_mount_pair support to docker sandbox
The flag --sandbox_add_mount_pair allows multiple 'source:target' pairs to be
added to the Linux sandbox. The docker sandbox should support this as well.
Closes #9175.
PiperOrigin-RevId: 264592536
diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/DockerCommandLineBuilder.java b/src/main/java/com/google/devtools/build/lib/sandbox/DockerCommandLineBuilder.java
index db8c5c8..9f90209 100644
--- a/src/main/java/com/google/devtools/build/lib/sandbox/DockerCommandLineBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/sandbox/DockerCommandLineBuilder.java
@@ -16,6 +16,7 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.runtime.ProcessWrapperUtil;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -39,6 +40,7 @@
private int gid;
private String commandId;
private boolean privileged;
+ private List<Map.Entry<String, String>> additionalMounts;
public DockerCommandLineBuilder setProcessWrapper(Path processWrapper) {
this.processWrapper = processWrapper;
@@ -111,6 +113,12 @@
return this;
}
+ public DockerCommandLineBuilder setAdditionalMounts(
+ List<Map.Entry<String, String>> additionalMounts) {
+ this.additionalMounts = additionalMounts;
+ return this;
+ }
+
public List<String> build() {
Preconditions.checkNotNull(sandboxExecRoot, "sandboxExecRoot must be set");
Preconditions.checkState(!imageName.isEmpty(), "imageName must be set");
@@ -138,6 +146,12 @@
"-v", sandboxExecRoot.getPathString() + ":" + execRootInsideDocker.getPathString());
dockerCmdLine.add("-w", execRootInsideDocker.getPathString());
+ for (ImmutableMap.Entry<String, String> additionalMountPath : additionalMounts) {
+ final String mountTarget = additionalMountPath.getValue();
+ final String mountSource = additionalMountPath.getKey();
+ dockerCmdLine.add("-v", mountSource + ":" + mountTarget);
+ }
+
StringBuilder uidGidFlagBuilder = new StringBuilder();
if (uid != 0) {
uidGidFlagBuilder.append(uid);
diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/DockerSandboxedSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/sandbox/DockerSandboxedSpawnRunner.java
index 920af5a..773c17e 100644
--- a/src/main/java/com/google/devtools/build/lib/sandbox/DockerSandboxedSpawnRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/sandbox/DockerSandboxedSpawnRunner.java
@@ -242,6 +242,7 @@
.setImageName(customizedImageName)
.setCommandArguments(spawn.getArguments())
.setSandboxExecRoot(sandboxExecRoot)
+ .setAdditionalMounts(getSandboxOptions().sandboxAdditionalMounts)
.setPrivileged(getSandboxOptions().dockerPrivileged)
.setEnvironmentVariables(environment)
.setKillDelay(timeoutKillDelay)