diff --git a/core/src/main/java/org/testcontainers/containers/Container.java b/core/src/main/java/org/testcontainers/containers/Container.java index 1bdd6933835..002d5163acd 100644 --- a/core/src/main/java/org/testcontainers/containers/Container.java +++ b/core/src/main/java/org/testcontainers/containers/Container.java @@ -129,6 +129,15 @@ public String getStderr() { */ SELF withFileSystemBind(String hostPath, String containerPath, BindMode mode); + /** + * Adds container volumes. + * + * @param container the container to add volumes from + * @param mode the bind mode + * @return this + */ + SELF withVolumesFrom(Container container, BindMode mode); + /** * Set the ports that this container listens on * diff --git a/core/src/main/java/org/testcontainers/containers/GenericContainer.java b/core/src/main/java/org/testcontainers/containers/GenericContainer.java index dde57985759..4f1d45f9c44 100644 --- a/core/src/main/java/org/testcontainers/containers/GenericContainer.java +++ b/core/src/main/java/org/testcontainers/containers/GenericContainer.java @@ -94,6 +94,9 @@ public class GenericContainer> @NonNull private boolean privilegedMode; + @NonNull + private List volumesFroms = new ArrayList<>(); + @NonNull private Map linkedContainers = new HashMap<>(); @@ -344,6 +347,10 @@ private void applyConfiguration(CreateContainerCmd createCommand) { .toArray(Bind[]::new); createCommand.withBinds(bindsArray); + VolumesFrom[] volumesFromsArray = volumesFroms.stream() + .toArray(VolumesFrom[]::new); + createCommand.withVolumesFrom(volumesFromsArray); + Set allLinks = new HashSet<>(); Set allLinkedContainerNetworks = new HashSet<>(); for (Map.Entry linkEntries : linkedContainers.entrySet()) { @@ -494,6 +501,19 @@ public SELF withFileSystemBind(String hostPath, String containerPath, BindMode m return self(); } + /** + * {@inheritDoc} + */ + @Override + public SELF withVolumesFrom(Container container, BindMode mode) { + addVolumesFrom(container, mode); + return self(); + } + + private void addVolumesFrom(Container container, BindMode mode) { + volumesFroms.add(new VolumesFrom(container.getContainerName(), mode.accessMode)); + } + @Override public void addLink(LinkableContainer otherContainer, String alias) { this.linkedContainers.put(alias, otherContainer);