Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to copy file contents to a service during docker-compose up?

I have 2 files:

.env
docker-compose.yml

docker-compose.yml looks like this:

version: '3'

services:
  database:
    image: mysql:5.7
  myapp:
    image: me/some-image
    depends_on:
      - database
    env_file: .env

myapp is a web service app that needs a .env file or optionally it can access the environment variables if no .env file is present.

As of now, the myapp is accessing the environment variables because I don't want the .env file to be included in the image build for security reasons. What I did is to pass a env_file: .env to the myapp service in the docker-compose.yml file so it will rely to the environment variables of the service instead of a .env file.

Now, I really want to add a .env file to the myapp service when running docker-compose up. Take note that the myapp web service will throw an error if it didnt find a .env file and the option is to look for a .env file instead of getting from the environment variables of the container.

Is there a way to create a .env file when running docker-compose up and copy the contents of the .env file on the host? Thank you in advance.

like image 460
wobsoriano Avatar asked Sep 01 '25 15:09

wobsoriano


1 Answers

You can use bind mount to mount file into the container

change the target location to the one your app requires

version: '3'

services:
  database:
    image: mysql:5.7
  myapp:
    image: me/some-image
    depends_on:
      - database
    env_file: .env
    volumes:
      - type: bind
        source: ./.env
        target: /envfile/.env
        readonly: true
like image 81
Piakkaa Avatar answered Sep 11 '25 22:09

Piakkaa