Configuration
Unlike other services, compose does not require a version, instead it allows you to directly configure Docker Compose's top-level volumes, networks, and services config directly.
We highly recommend you check the Docker Compose docs!
services, volumes and networks below come directly from Docker Compose so we highly recommend you check out their docs.
services:
custom-service:
type: compose
app_mount: delegated
services:
image: drupal:8
# Required. See Below
command: docker-php-entrypoint apache2-foreground
ports:
- '80'
volumes:
my-volume:
networks:
my-network:Setting the app mount
Many Docker images will put code in /app. This directly conflicts with Lando's default codebase mount point. If you are running into a problem because of this collision, we recommend you disable the app_mount by setting it to false or disabled.
This will prevent Lando from mounting your codebase to /app so the Docker image can use its own code at /app.
services:
pghero:
type: compose
app_mount: false
services:
image: ankane/pghero
command: puma -C config/puma.rbSetting the command
Note that while compose services also get the same Lando secret sauce, there is a notable difference. By default, Lando will hijack the Docker containers entrypoint. This means if your custom container sets its own entrypoint, you will need to remove that entrypoint and set it as the first argument in the command.
services:
custom-service:
type: compose
app_mount: delegated
services:
image: drupal:8
# Required. See Below
command: docker-php-entrypoint apache2-foreground
ports:
- '80'
volumes:
my-volume:
networks:
my-network:In the example above, docker-php-entrypoint is the default entrypoint for the drupal:8 image but we have moved it so that it is the first argument of command. This both allows the container to run as expected and allows Lando to do its thing.
Choosing the user
Many non-Lando containers do not run as the root user by default. This is OK but comes with a few caveats. The most relevant are that Lando will not be able to execute its normal boot up steps which:
- Map
host:containeruser permissions - Generate a certificate for the service
- Load user and lando managed SSH keys
Also note that containers that do not have bash installed, like some alpine ones, will similarly not be able to load up SSH keys.
These factors may or may not be relevant depending on what you are doing so they are here just as a FYI.
If you are using a container that cannot run as root but still want that Lando magic you can try something like below.
services:
custom-service:
type: compose
services:
user: root
image: drupal:8
# Required. See Below
command: docker-php-entrypoint apache2-foreground
ports:
- '80'
environment:
LANDO_DROP_USER: otheruser
volumes:
my-volume:
networks:
my-network:The relevant pieces here are setting user: root and then the environment variable LANDO_DROP_USER to whatever user the container is suppose to run as.
In this example the container will boot as root do the Lando things it needs to do and then run docker-php-entrypoint apache2-foreground as otheruser.