Simpler docker-compose with inline config files
So you have some config that you want to provide to a service started from docker compose.
Did you know you can keep things simple by inlining that config in the compose file, rather than messing with mounts?
Inline content in docker-compose.yaml
In our case we want a json file with 👇 mounted at /etc/consul/client.json
{
"node_name": "consul-client",
"data_dir": "/consul/data",
"log_level": "ERROR",
"server": false,
"retry_interval": "10s",
"retry_join":[
"consul-server"
]
}You can create a config section in your docker-compose.yaml file and provide the content of the file.
configs:
consul_client.json:
content: |
{
"node_name": "consul-client",
"data_dir": "/consul/data",
"log_level": "ERROR",
"server": false,
"retry_interval": "10s",
"retry_join":[
"consul-server"
]
}This works by creating an entry for the file and use the | sign on the content field to inline the content of the file. | accepts a multiline string and preserves new lines /n in the output.
Then we can add a configs section under the service, where we want to mount the file, specifying the source as the name we used 👆 consule_client.json and target as the path on disk where the file should be placed in the container /etc/consul/client.json.
configs:
- source: consul_client.json
target: /etc/consul/client.jsonAll together this looks like 👇
configs:
consul_client.json:
content: |
{
"node_name": "consul-client",
"data_dir": "/consul/data",
"log_level": "ERROR",
"server": false,
"retry_interval": "10s",
"retry_join":[
"consul-server"
]
}
services:
windmill-host:
build:
context: .
dockerfile: ./mock-services/some-host/Dockerfile
container_name: windmill-host
...
configs:
- source: consul_client.json
target: /etc/consul/client.jsonDocs
Here are the Docker docks which go into more detail: