-
Notifications
You must be signed in to change notification settings - Fork 5.8k
Description
Description
The documentation says that:
Values present in the environment at runtime always override those defined inside the .env file. Similarly, values passed via command-line arguments take precedence as well.
This doesn't seem to be the case when interpolating a variable used inside the .env file.
Steps to reproduce the issue:
Assume a .env of:
VERSION=from_dot_env
IMAGE=foo:${VERSION}
and a compose.yml of:
services:
echo:
image: bash
environment:
IMAGE: ${IMAGE}
command: echo "$IMAGE"
Describe the results you received:
I get:
% VERSION=from_shell docker compose run echo
foo:from_dot_env
Describe the results you expected:
I expected:
% VERSION=from_shell docker compose run echo
foo:from_shell
because VERSION=from_shell is present in the shell, and should "override [VERSION=from_dot_env] defined inside the .env file".
Additional information you deem important (e.g. issue happens only occasionally):
I get what I expect if I specify the entire IMAGE variable:
% IMAGE=bar:from_shell docker compose run echo
bar:from_shell
so it looks like the shell isn't being considered when interpolating variables defined in .env.
Output of docker compose version:
I see the same result on V1 and V2.
% docker compose version
Docker Compose version v2.2.1
% docker-compose version
docker-compose version 1.29.2, build 5becea4c
docker-py version: 5.0.0
CPython version: 3.9.0
OpenSSL version: OpenSSL 1.1.1h 22 Sep 2020
Output of docker info:
Client:
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc., v0.7.1)
compose: Docker Compose (Docker Inc., v2.2.1)
scan: Docker Scan (Docker Inc., v0.11.0)
Server:
Containers: 72
Running: 3
Paused: 0
Stopped: 69
Images: 102
Server Version: 20.10.11
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: local
Cgroup Driver: cgroupfs
Cgroup Version: 2
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
runc version: v1.0.2-0-g52b36a2
init version: de40ad0
Security Options:
seccomp
Profile: default
cgroupns
Kernel Version: 5.10.76-linuxkit
Operating System: Docker Desktop
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 11.7GiB
Name: docker-desktop
ID: PL5B:VYGD:V6Y2:T3NB:U6DU:IXBL:KQGG:G745:YCZF:BOY3:C575:3CC3
Docker Root Dir: /var/lib/docker
Debug Mode: false
HTTP Proxy: http.docker.internal:3128
HTTPS Proxy: http.docker.internal:3128
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Additional environment details: