compose icon indicating copy to clipboard operation
compose copied to clipboard

Support setting DOCKER_HOST in .env file

Open jmera opened this issue 3 years ago • 17 comments

Description

With Compose V1 we have the ability to set a project-specific DOCKER_HOST in .env, with V2 this is no longer possible.

Steps to reproduce the issue:

  1. Add an .env file with a custom value for DOCKER_HOST
  2. docker compose commands target the default docker host

Describe the results you received: docker compose commands target the default docker host

Describe the results you expected: docker compose commands target the docker host specified in .env

Output of docker compose version:

➜  ~ docker compose version
Docker Compose version v2.2.3

Output of docker info:

➜  ~ docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc., v0.7.1)
  compose: Docker Compose (Docker Inc., v2.2.3)
  scan: Docker Scan (Docker Inc., v0.17.0)

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 15
 Server Version: 20.10.12
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 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: 5.804GiB
 Name: docker-desktop
 ID: 6IUW:D7VH:NGSI:3VVB:WPYB:EQ3V:6JCD:IARV:6M6N:VRTI:MXNT:RCJ2
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 HTTP Proxy: http.docker.internal:3128
 HTTPS Proxy: http.docker.internal:3128
 No Proxy: hubproxy.docker.internal
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  hubproxy.docker.internal:5000
  127.0.0.0/8
 Live Restore Enabled: false

Additional environment details: N/A

jmera avatar Feb 26 '22 18:02 jmera

I can confirm that setting DOCKER_HOST in an .env file does not work anymore with docker compose v2. Also DOCKER_CONTEXT does not work, but would be equally handy.

Steps to reproduce:

docker-compose.yml:

version: '3'
services:
  echo:
    image: alpine
    command: "echo host: $DOCKER_HOST context: $DOCKER_CONTEXT"

.env:

DOCKER_CONTEXT=blubb
DOCKER_HOST=tcp://127.99.99.99:9999

docker-compose v1 (disable "use compose v2" in docker desktop settings) correctly tries to connect to the non-existent host:

% docker-compose up
[...]
docker.errors.DockerException: Error while fetching server API version: HTTPConnectionPool(host='127.99.99.99', port=9999): Max retries exceeded with url: /version (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x10fb97df0>, 'Connection to 127.99.99.99 timed out. (connect timeout=60)'))
[26355] Failed to execute script docker-compose

docker compose v2 ignores both DOCKER_HOST and DOCKER_CONTEXT and connects to the default host instead. It still outputs the correct variable values however:

% docker compose up     
Attaching to docker-test-echo-1
docker-test-echo-1  | host: tcp://127.99.99.99:9999 context: blubb
docker-test-echo-1 exited with code 0

Only when I set DOCKER_HOST or DOCKER_CONTEXT as environment variables, docker compose fails as it should:

% DOCKER_CONTEXT=bar docker compose up
unable to resolve docker endpoint: context "bar" does not exist
% DOCKER_HOST=tcp://127.99.99.99:9999 docker compose up
Cannot connect to the Docker daemon at tcp://127.99.99.99:9999. Is the docker daemon running?

I used bogus host and context values for demonstration purposes. The same holds true for correct values.

Output of docker compose version:

Docker Compose version v2.2.3

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.3)
  scan: Docker Scan (Docker Inc., v0.17.0)

Server:
 Containers: 9
  Running: 7
  Paused: 0
  Stopped: 2
 Images: 33
 Server Version: 20.10.12
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 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: 3
 Total Memory: 3.842GiB
 Name: docker-desktop
 ID: RZ7C:BDKF:4WXG:Z5GB:NAVW:U7TN:BUNJ:7PLB:KHVH:2XMW:PQRK:DIUX
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 HTTP Proxy: http.docker.internal:3128
 HTTPS Proxy: http.docker.internal:3128
 No Proxy: hubproxy.docker.internal
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  hubproxy.docker.internal:5000
  127.0.0.0/8
 Live Restore Enabled: false

prullmann avatar Mar 07 '22 13:03 prullmann

I have experienced the same issue as prullmann after following their procedure. The DOCKER_HOST variable does work for me in the .env file though.

Output of docker compose version:

Docker Compose version v2.2.3

Output of docker info:

 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc., v0.7.1)
  compose: Docker Compose (Docker Inc., v2.2.3)
  scan: Docker Scan (Docker Inc., v0.17.0)

Server:
 Containers: 1
  Running: 0
  Paused: 0
  Stopped: 1
 Images: 16
 Server Version: 20.10.12
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 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: 4
 Total Memory: 1.939GiB
 Name: docker-desktop
 ID: Y3MP:EXFO:AJ4H:JHN3:ERHA:QFDT:JG47:YUDW:WRNQ:RV44:DSJI:FRFY
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 HTTP Proxy: http.docker.internal:3128
 HTTPS Proxy: http.docker.internal:3128
 No Proxy: hubproxy.docker.internal
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  hubproxy.docker.internal:5000
  127.0.0.0/8
 Live Restore Enabled: false```

hskingr avatar Apr 05 '22 14:04 hskingr

related to https://github.com/docker/compose/issues/9345

ndeloof avatar Apr 06 '22 07:04 ndeloof

I have experienced the same issue as prullmann after following their procedure. The DOCKER_HOST variable does work for me in the .env file though.

@hskingr Can you please elaborate what works for you and what not?

prullmann avatar May 05 '22 11:05 prullmann

Any updates on this? Have facing same problem.

Had to use compose V1 as a result to read DOCKER_HOST from .env file.

trcoelho avatar May 06 '22 11:05 trcoelho

Had to use compose V1 as a result to read DOCKER_HOST from .env file.

@trcoelho Does that work well for you? I noticed in my project that some compose commands like docker-compose exec also don't work with v1. Exec seems to only use DOCKER_HOST from .env to discover the container, but to connect, it falls back to the current docker context and thus fails with Error: No such container: .... This sounds very much like #6661.

When I run docker context use ... to set the docker context to match the DOCKER_HOST in the .env file, exec works. Setting DOCKER_HOST or DOCKER_CONTEXT as an environment variable also makes exec work again. Adding COMPOSE_INTERACTIVE_NO_CLI=1 to the .env file as suggested in #6661 does not work for me.

However, I struggled to create a small example to reproduce this behaviour. Does exec work for you with compose v1?

prullmann avatar May 13 '22 12:05 prullmann

@prullmann

- DOCKER_HOST
- DOCKER_CONTEXT

Both do not work as environment variables in docker compose v2

They both work when docker compose is set to v1 in the docker desktop preferences with the command docker-compose up

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

docker compose version

Docker Compose version v2.5.0

docker info

Client:
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc., v0.8.2)
  compose: Docker Compose (Docker Inc., v2.5.0)
  sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc., 0.6.0)
  scan: Docker Scan (Docker Inc., v0.17.0)

Server:
 Containers: 3
  Running: 0
  Paused: 0
  Stopped: 3
 Images: 25
 Server Version: 20.10.14
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 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: 3df54a852345ae127d1fa3092b95168e4a88e2f8
 runc version: v1.0.3-0-gf46b6ba
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
  cgroupns
 Kernel Version: 5.10.104-linuxkit
 Operating System: Docker Desktop
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 7.774GiB
 Name: docker-desktop
 ID: WXIK:2PC3:ZMKD:EAVM:BDJZ:3ATQ:MKAG:J34Q:Z42E:OW6Q:CO2M:PBCV
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 HTTP Proxy: http.docker.internal:3128
 HTTPS Proxy: http.docker.internal:3128
 No Proxy: hubproxy.docker.internal
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  hubproxy.docker.internal:5000
  127.0.0.0/8
 Live Restore Enabled: false

hskingr avatar May 13 '22 17:05 hskingr

A few days ago commit #9512 was merged that could also fix this issue. It looks like it's already included in Compose v2.6.0 and Docker Desktop 4.90 which was released two days ago.

prullmann avatar Jun 04 '22 12:06 prullmann

Hi @prullmann .

Have checked and still docker compose V2 does not read DOCKER_HOST environment variable as V1 does. Have tested on latest Docker Desktop Version:

docker info

Client: Context: default Debug Mode: false Plugins: buildx: Docker Buildx (Docker Inc., v0.8.2) compose: Docker Compose (Docker Inc., v2.6.0) sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc., 0.6.0) scan: Docker Scan (Docker Inc., v0.17.0)

Server: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 20.10.16 Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true userxattr: false Logging Driver: json-file 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: 212e8b6fa2f44b9c21b2798135fc6fb7c53efc16 runc version: v1.1.1-0-g52de29d init version: de40ad0 Security Options: seccomp Profile: default cgroupns Kernel Version: 5.10.104-linuxkit Operating System: Docker Desktop OSType: linux Architecture: x86_64 CPUs: 2 Total Memory: 1.939GiB Name: docker-desktop ID: 35KN:CMFC:RTCR:5FGL:BI4P:UUYB:W6QF:J7H4:VCOD:W4TD:RYBJ:43IN Docker Root Dir: /var/lib/docker Debug Mode: false HTTP Proxy: http.docker.internal:3128 HTTPS Proxy: http.docker.internal:3128 No Proxy: hubproxy.docker.internal Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: hubproxy.docker.internal:5000 127.0.0.0/8 Live Restore Enabled: false

docker --version

Docker version 20.10.16, build aa7e414

docker-compose --version

Docker Compose version v2.6.0

Thank you.

trcoelho avatar Jun 06 '22 12:06 trcoelho

I can confirm that neither DOCKER_HOST nor DOCKER_CONTEXT are picked up by docker compose v2. So no change with the latest Compose v2.6.0 / Docker 4.9.0 as hoped.

Steps to reproduce:

Make sure DOCKER_HOST and DOCKER_CONTEXT are not set as environment variables and are not already defined in .env. Also check docker context show returns default.

Plain compose command: docker compose ps -> local docker environment used as expected docker-compose ps -> local docker environment used as expected docker-compose ps (v1, 'use compose v2' unchecked in settings) -> local docker environment used as expected

Setting DOCKER_HOST=ssh://[email protected] in .env: docker compose ps -> local docker environment used, NOT remote environment as expected ❌ docker-compose ps -> local docker environment used, NOT remote environment as expected ❌ docker-compose ps (v1) -> remote environment used as expected ✅ docker-compose exec service echo hello world (v1) -> Error: No such container: 25aaa1fc... ❌ Setting DOCKER_HOST in a custom .env.remote file and using the option --env-file .env.remote yields the same results.

Defining DOCKER_HOST in command line: DOCKER_HOST=ssh://[email protected] docker compose ps -> remote environment used as expected DOCKER_HOST=ssh://[email protected] docker-compose ps -> remote environment used as expected DOCKER_HOST=ssh://[email protected] docker-compose ps (v1) -> remote environment used as expected Setting an environment variable via export DOCKER_HOST=ssh://[email protected] yields the same results.

Using --host option: docker --host ssh://[email protected] compose ps -> remote environment used as expected docker-compose --host ssh://[email protected] ps -> remote environment as expected docker-compose --host ssh://[email protected] ps (v1) -> remote environment used as expected

Setting DOCKER_CONTEXT=ssh://[email protected] in .env: docker compose ps -> local docker environment used, NOT remote environment as expected ❌ docker-compose ps -> local docker environment used, NOT remote environment as expected ❌ docker-compose ps (v1) -> local environment used, because compose v1 does not support contexts Setting DOCKER_CONTEXT in a custom .env.remote file and using the option --env-file .env.remote yields the same results.

Defining DOCKER_CONTEXT in command line: DOCKER_CONTEXT=remote docker compose ps -> remote environment used as expected DOCKER_CONTEXT=remote docker-compose ps -> remote environment used as expected DOCKER_CONTEXT=remote docker-compose ps (v1) -> local environment used, because compose v1 does not support contexts Setting an environment variable via export DOCKER_CONTEXT=remote yields the same results. And setting the current context first using docker context use remote also yields the same results.

Using --context option: docker --context remote compose ps -> remote environment used as expected docker-compose --context remote ps -> remote environment used as expected docker-compose --context remote ps (v1) -> remote environment used although compose v1 does not support contexts 🤔

docker info

Client: Context: default Debug Mode: false Plugins: buildx: Docker Buildx (Docker Inc., v0.8.2) compose: Docker Compose (Docker Inc., v2.6.0) sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc., 0.6.0) scan: Docker Scan (Docker Inc., v0.17.0)

Server: Containers: 2 Running: 0 Paused: 0 Stopped: 2 Images: 11 Server Version: 20.10.16 Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true userxattr: false Logging Driver: json-file 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.runtime.v1.linux runc io.containerd.runc.v2 Default Runtime: runc Init Binary: docker-init containerd version: 212e8b6fa2f44b9c21b2798135fc6fb7c53efc16 runc version: v1.1.1-0-g52de29d init version: de40ad0 Security Options: seccomp Profile: default cgroupns Kernel Version: 5.10.104-linuxkit Operating System: Docker Desktop OSType: linux Architecture: x86_64 CPUs: 2 Total Memory: 3.843GiB Name: docker-desktop ID: DVRV:IQJ6:MFO6:HCDI:TUGK:WCIN:PBMI:EWCZ:FQSN:44PE:ONRA:IXDE Docker Root Dir: /var/lib/docker Debug Mode: false HTTP Proxy: http.docker.internal:3128 HTTPS Proxy: http.docker.internal:3128 No Proxy: hubproxy.docker.internal Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: hubproxy.docker.internal:5000 127.0.0.0/8 Live Restore Enabled: false

prullmann avatar Jun 09 '22 11:06 prullmann

It seems #9512 by @ulyssessouza implemented feature request #9345 not by loading the default .env file or using one from the --env-file command line argument. Instead it's loading an env_file specified in a docker_compose.yml, as described in issue #9521.

prullmann avatar Jun 09 '22 11:06 prullmann

Hello @prullmann , as we can confirm that is really happening, do we have any scheduled date as a result to solve that?

Thank you.

trcoelho avatar Jun 20 '22 12:06 trcoelho

Hi @trcoelho, I am just a user trying to help getting this fixed. From the git history, it looks like @ulyssessouza and @glours worked on issue #9521, but I can't see if this fixes also our issue here. New releases seem to be every few weeks, so we'll see if it's fixed quite soon, I guess.

prullmann avatar Jun 28 '22 08:06 prullmann

Also can confirm that this has burned/caught me off guard a few times. I forgot a few months ago, got a new laptop and its happening again.

I use DOCKER_HOST to remotely manage multiple local compose servers and not have configs on the server. This appears to not be possible unless you toggle (enable compose v2) in the docker desktop settings.

An update would be awesome to get this resolved. I'm wondering if I there would be a different way to change the docker daemon to point to a remote host.

requiem240sx avatar Jun 28 '22 18:06 requiem240sx

Hello, have updated to the latest Docker Desktop version 4.10.0 and this issue was not resolved.

docker info

Client: Context: default Debug Mode: false Plugins: buildx: Docker Buildx (Docker Inc., v0.8.2) compose: Docker Compose (Docker Inc., v2.6.1) extension: Manages Docker extensions (Docker Inc., v0.2.7) sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc., 0.6.0) scan: Docker Scan (Docker Inc., v0.17.0)

Server: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 2 Server Version: 20.10.17 Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true userxattr: false Logging Driver: json-file 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: 10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1 runc version: v1.1.2-0-ga916309 init version: de40ad0 Security Options: seccomp Profile: default cgroupns Kernel Version: 5.10.104-linuxkit Operating System: Docker Desktop OSType: linux Architecture: x86_64 CPUs: 2 Total Memory: 1.939GiB Name: docker-desktop ID: NVSC:HJGR:ZFQG:IGI7:NA5N:UKHL:7CMX:46VF:KJ2S:UABI:BQGJ:ONNY Docker Root Dir: /var/lib/docker Debug Mode: false HTTP Proxy: http.docker.internal:3128 HTTPS Proxy: http.docker.internal:3128 No Proxy: hubproxy.docker.internal Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: hubproxy.docker.internal:5000 127.0.0.0/8 Live Restore Enabled: false

docker --version

Docker version 20.10.17, build 100c701

Thank you.

trcoelho avatar Jul 04 '22 12:07 trcoelho

I'm wondering if I there would be a different way to change the docker daemon to point to a remote host.

@requiem240sx There is DOCKER_CONTEXT, but that also doesn't work with compose v2 and is non-existent in v1.

prullmann avatar Jul 08 '22 11:07 prullmann

Hello, do we have any news regarding this one?

Have updated to the latest docker version:

docker info

Client:
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc., v0.8.2)
  compose: Docker Compose (Docker Inc., v2.7.0)
  extension: Manages Docker extensions (Docker Inc., v0.2.8)
  sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc., 0.6.0)
  scan: Docker Scan (Docker Inc., v0.17.0)

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 1
 Server Version: 20.10.17
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 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: runc io.containerd.runc.v2 io.containerd.runtime.v1.linux
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1
 runc version: v1.1.2-0-ga916309
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
  cgroupns
 Kernel Version: 5.10.104-linuxkit
 Operating System: Docker Desktop
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 1.938GiB
 Name: docker-desktop
 ID: U6MR:G7JT:YGHA:L24G:AX74:GPBU:4K3V:FUFX:MW6Y:TRSM:ZLRK:HWSX
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 HTTP Proxy: http.docker.internal:3128
 HTTPS Proxy: http.docker.internal:3128
 No Proxy: hubproxy.docker.internal
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  hubproxy.docker.internal:5000
  127.0.0.0/8
 Live Restore Enabled: false

docker --version

Docker version 20.10.17, build 100c701

docker compose version

Docker Compose version v2.7.0

And it still docker compose V2 does not read DOCKER_HOST .env variable.

@ulyssessouza , has any thoughts?

Thank you.

trcoelho avatar Aug 03 '22 17:08 trcoelho

What happened here is that the variable was correctly loaded but not applied into docker APIClient. So it would work for interpolation but not to drive the client.

A fix is on its way -> https://github.com/docker/compose/pull/9745

ulyssessouza avatar Aug 12 '22 18:08 ulyssessouza

Thanks @ulyssessouza !

trcoelho avatar Aug 15 '22 13:08 trcoelho

Hi @ulyssessouza , when this will be available?

Thank you!

trcoelho avatar Sep 05 '22 13:09 trcoelho

Re-opening because we had to revert #9745 in #9792 because it caused issues with TLS-enabled Docker hosts.

As a result, this is not currently available in the latest release of Docker Compose.

milas avatar Sep 06 '22 14:09 milas

Upon further review, we’ve decided to not support dynamically setting DOCKER_HOST via .env files in Compose v2 (#9871).

Compose v2 is a Docker CLI plugin, and we want to ensure consistent behavior across all CLI plugins, which means using the "inherited" Docker API connection provided to the plugin, respecting all options, such as the active context.

If you were relying on this functionality, I’d recommend taking a look at projects such as direnv, which can automatically set environment variables such as DOCKER_HOST or DOCKER_CONTEXT based on the current directory.

milas avatar Sep 23 '22 19:09 milas

Well, don't get it because we have that behavior on docker compose V1, which helps a lot when we have to manipulate several environments remotely.

Believe keep using V1 then :).

Thanks for the updates.

trcoelho avatar Sep 26 '22 13:09 trcoelho

Upon further review, we’ve decided to not support dynamically setting DOCKER_HOST via .env files in Compose v2 (#9871).

@milas Thanks for clarifying, sounds sensible so far. But what mechanism should now be used when managing different environments (like staging vs production)?

You say that compose should not define the connection depending on its own configuration (eg .env.staging or docker-compose-staging.yml). That suggests compose should choose its configuration depending on the connection it gets (eg DOCKER_CONTEXT). Eg by using an .env file like this:

COMPOSE_FILE=docker-compose.yml:docker-compose.${DOCKER_CONTEXT}.yml

Is that the way to go or are there more clever ways?

prullmann avatar Jan 13 '23 12:01 prullmann

Hi @milas , as per docker documentation this environment variable should work on docker compose V2:

https://docs.docker.com/compose/environment-variables/envvars/

Is this correct?

If DOCKER_HOST is unavailable for compose V2, what should be the correct way to deploy in different servers?

Thanks in advance.

trcoelho avatar Feb 24 '23 00:02 trcoelho