Skip to content

Support for runArgs for docker compose scenario #39

@bgloss

Description

@bgloss

As a developer, I want to point docker compose to my (the correct) .env-file.

{
	"name": "Python 3 & Poetry",
	"dockerComposeFile": [
		"../../docker-compose.yml",
		"./docker-compose.yml"
	],
        "runArgs": ["--env-file=../../.env"],      <-- New Option
        ...
}

Discussed in https://github.com/orgs/devcontainers/discussions/36

Originally posted by bgloss March 10, 2023
I don't get the environment variables from my project's .env file into the docker-compose.ymlsetup with a pretty default project layout.

My project layout is as follows:

.devcontainer/
     devcontainer.json
     docker-compose.yml
     Dockerfile
.env

I want to have in docker-compose.yml a section to create a Postgres container with setting up the environment one by one: POSTGRES_USER, POSTGRES_PASSWORD, and POSTGRES_DB and fill them with variables from the project's .env file. The relevant section in docker-compose.yml is:

  postgres:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_DB: ${POSTGRES_DB}

I do NOT want to have a copy of my .env file in the .devcontainer/ folder, as it is the case in some of the DevContainer templates. This would work, as in this case docker compose loads it by default. I don't want this organization, as the .env file is also needed by the project's code and expected in the project root.

I also don't want to expose the whole .env-file to my container, which I could do with the env_file option in the docker compose service description.

When building a container myself (just docker, no docker compose), I can add in devcontainer.json the option runArgs next to the option build giving the env-file information to docker: --env-file ../.env However, this is not possible when using a docker-compose setup in vscode and DevContainers with "dockerComposeFile": "docker-compose.yml".

https://containers.dev/implementors/json_reference/

At the command line docker compose --env-file ../.env up does the trick.

So, my questions:

  • Am I missing something?
  • Is this a missing feature in devcontainer.json?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions