# Copiar archivos en los contenedores


A veces es necesario inicializar un contenedor colocando archivos en una
ubicación específica. Por ejemplo, PostgreSQL ejecuta los scripts SQL ubicados en
`/docker-entrypoint-initdb.d/` cuando el contenedor se inicia.

## Crear el script de inicialización

Crea `src/test/resources/init-db.sql`:

```sql
create table customers (
     id bigint not null,
     name varchar not null,
     primary key (id)
);
```

## Copiar el archivo en el contenedor

Utiliza `withCopyFileToContainer()` para copiar el script SQL en el directorio de
inicialización del contenedor:

```java
package com.testcontainers.demo;

import static org.junit.jupiter.api.Assertions.assertFalse;

import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.testcontainers.postgresql.PostgreSQLContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import org.testcontainers.utility.MountableFile;

@Testcontainers
class CustomerServiceTest {

  @Container
  static PostgreSQLContainer postgres = new PostgreSQLContainer(
    "postgres:16-alpine"
  )
    .withCopyFileToContainer(
      MountableFile.forClasspathResource("init-db.sql"),
      "/docker-entrypoint-initdb.d/"
    );

  CustomerService customerService;

  @BeforeEach
  void setUp() {
    customerService =
    new CustomerService(
      postgres.getJdbcUrl(),
      postgres.getUsername(),
      postgres.getPassword()
    );
  }

  @Test
  void shouldGetCustomers() {
    customerService.createCustomer(new Customer(1L, "George"));
    customerService.createCustomer(new Customer(2L, "John"));

    List<Customer> customers = customerService.getAllCustomers();
    assertFalse(customers.isEmpty());
  }
}
```

El método `withCopyFileToContainer(MountableFile, String)` copia `init-db.sql`
desde el classpath hacia `/docker-entrypoint-initdb.d/` dentro del contenedor.
PostgreSQL ejecuta automáticamente los scripts en ese directorio al iniciar.

También puedes copiar archivos desde cualquier ruta del host:

```java
.withCopyFileToContainer(
    MountableFile.forHostPath("/host/path/to/init-db.sql"),
    "/docker-entrypoint-initdb.d/"
);
```

