How to Use the Docker Compose Override File
In Docker Compose, an override file is a powerful feature that
allows you to modify the default configuration provided by the
main
docker-compose.yml
without the need to directly edit or duplicate the whole file.
The primary use of the override file is for local development
customizations, and Docker Compose merges the configurations
of the
docker-compose.yml
and the
docker-compose.override.yml
files when you run
docker compose up
.
Here’s a quick guide on how to use the
docker-compose.override.yml
:
Note: Please consult the
docker-compose.override.yml.example
for more examples
See the official docker documentation for more info:
- docker docs - understanding-multiple-compose-files
- docker docs - merge-compose-files
- docker docs - specifying-multiple-compose-files
Step 1: Create a
docker-compose.override.yml
file
If you don’t already have a
docker-compose.override.yml
file, you can create one by copying the example override
content:
cp docker-compose.override.yml.example docker-compose.override.yml
This file will be picked up by Docker Compose automatically when you run docker-compose commands.
Step 2: Edit the override file
Open your
docker-compose.override.yml
file with vscode or any text editor.
Make your desired changes by uncommenting the relevant sections and customizing them as needed.
Warning: You can only specify every service name once (api, mongodb, meilisearch, …) If you want to override multiple settings in one service you will have to edit accordingly.
Examples
If you want to make sure Docker can use your
rumitalk.yaml
file
for
Custom Endpoints & Configuration, it would look like this:
version: '3.4'
services:
api:
volumes:
- ./rumitalk.yaml:/app/rumitalk.yaml
Or, if you want to locally build the image for the
api
service, use
the RumiTalk config file, and use the older Mongo that
doesn’t requires AVX support, your
docker-compose.override.yml
might look like this:
version: '3.4'
services:
api:
volumes:
- ./rumitalk.yaml:/app/rumitalk.yaml
image: librechat
build:
context: .
target: node
mongodb:
image: mongo:4.4.18
Note: Be cautious if you expose ports for MongoDB or Meilisearch to the public, as it can make your data vulnerable.
Step 3: Apply the changes
To apply your configuration changes, simply run Docker Compose
as usual. Docker Compose automatically takes into account both
the
docker-compose.yml
and the
docker-compose.override.yml
files:
docker compose up -d
Step 4: Verify the changes
After starting your services with the modified configuration,
you can verify that the changes have been applied using the
docker ps
command
to list the running containers and their properties, such as
ports.
Important Considerations
-
Order of Precedence: Values defined in the
override file take precedence over those specified in the
original
docker-compose.yml
file. - Security: When customizing ports and publicly exposing services, always be conscious of the security implications. Avoid using defaults for production or sensitive environments.
By following these steps and considerations, you can easily
and safely modify your Docker Compose configuration without
altering the original
docker-compose.yml
file, making it simpler to manage and maintain different
environments or local customizations.
deploy-compose.yml
To use an override file with a non-default Docker Compose
file, such as
deploy-compose.yml
,
you will have to explicitly specify both files when running
Docker Compose commands.
Docker Compose allows you to specify multiple
-f
or
--file
options to
include multiple compose files, where settings in later files
override or add to those in the first.
If you use
deploy-compose.yml
as your main Docker Compose configuration and you have an
override file named
docker-compose.override.yml
(you can name the override file whatever you want, but you may
have this specific file already), you would run Docker Compose
commands like so:
docker compose -f deploy-compose.yml -f docker-compose.override.yml pull
docker compose -f deploy-compose.yml -f docker-compose.override.yml up