-
Notifications
You must be signed in to change notification settings - Fork 5.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
docker-compose V2 fails for port range and replicas>1 where V1 would succeed #8530
Comments
When running the example from above the V1 docker-compose will issue a warning but proceed without an error: Is it possible that V2 is more restricted and hence just fails instead of reporting a warning like V1 ? Additionally the docker-compose ports documentation is not very clear about this apparently working port-range feature in V1, i.e. automatically assign a different port from the given range of ports to multi-replica-services. |
V2 indeed doesn't reproduce this V1 warning, this is something we should consider.
Compose v1 creates containers sequentially, as an equivalent to Compose v2 creates containers in parallel, so this engine feature doesn't apply and this results in a port conflict. Seems we will have to drop this (premature?) optimization to restore this feature. |
Hi I have same problem on V2. The host ports are assigned to one container instead of distributing them among all replicas.
On V1 replicas works just fine:
|
This is still problem
|
ran a quick test, and this actually isn't an issue with replicas. Even using
.. so there's something wrong with compose v2 passing port specification to the engine. |
confirmed. "PortBindings": {
"5000/tcp": [
{
"HostIp": "",
"HostPort": "6005-6015"
}
]
}, compose-v2 creates container as: "PortBindings": {
"5000/tcp": [
{
"HostIp": "",
"HostPort": "6005"
},
{
"HostIp": "",
"HostPort": "6006"
},
{
"HostIp": "",
"HostPort": "6007"
},
... |
the issue is in compose-go, which "extends" |
I'm not sure if this is the same problem, but researching how to solve my own problem took me here. I was having a similar problem on a Mac,
and I was able to fix it by checking:
and then turning off the |
compose-go both extends port range to a list of ports, but also assumes this is expected I guess we are stuck here :'( |
This will also require some clarification on https://github.com/compose-spec/compose-spec/blob/master/spec.md#ports if we want this to be addressed
|
Sorry for the bump, any updates? |
the same issue here, I force myself to downgrade to v1 |
Is there a known workaround for this? |
Unfortunately still occurring on Docker Compose version v2.2.3 |
Docker version 20.10.13, build a224086 I'm seeing this issue also. @hacdias @Hazmi35 If you run the Currently having to remove the replica config an repeat the container instance config for each replica I need. This issue needs looking at...its been open for a very long time with a significant bug in the use of docker-compose when testing a scaling setup. I've moved to Kubernetes/skaffold. |
$ docker --version $ docker-compose --version Also running into this issues. Sometimes it will bring everything up correctly, and other times I will get the bind error and one of the replicas will not start. I use Docker for Mac so I don't know if that is part of the reason. |
If I am not mistaken, the "bug" is still here. |
Same issue as #7188. |
…ently because of a broken compatibility. docker/compose#8530
I have a similar problem as well. services:
api:
build: .
ports:
- 8000-8010:8000-8010 I am trying to create at least 2 instances of the same image and it fails miserably:
I referenced this in an issue - #9727 |
I think this issue was resolved in the new version. This configuration worked for me. Docker Compose Version.
Configuration file version: '3.8'
services:
video:
image: video:latest
restart: always
ports:
- "4060-4062:4060"
deploy:
mode: replicated
replicas: 3 And the replicas it created:
All the replicas correctly mapped to |
It's still happening. (m1 mac, macOS 12.1 monterey) $ docker -v
Docker version 20.10.20, build 9fdeb9c
$ docker compose version
Docker Compose version v2.12.1 services:
redis:
image: bitnami/redis:latest
environment:
- ALLOW_EMPTY_PASSWORD=yes
deploy:
mode: replicated
replicas: 3
ports:
- 6300-6400:6379 $ docker compose up -d
[+] Running 1/4
⠿ Network composetest_default Created 0.0s
⠿ Container composetest-redis-3 Starting 0.1s
⠿ Container composetest-redis-1 Starting 0.1s
⠿ Container composetest-redis-2 Starting 0.1s
Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:6300 -> 0.0.0.0:0: listen tcp 0.0.0.0:6300: bind: address already in use
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8cb371485fba bitnami/redis:latest "/opt/bitnami/script…" 8 seconds ago Up 7 seconds 0.0.0.0:6300->6379/tcp composetest-redis-3 I'd like to fix this, but don't know where to begin. Any advice? |
It seems to be more of a timing issue afaik. I have seen the exact same docker-compose work if there is a delay (in my case due to high cpu load) so that the first container starts and it takes a second or two before the second container starts. When there is almost no delay (just some milliseconds) I get the bind-error. |
@sh-cho Having the same issue, docker-compose v 2.6.0 on Mac M1. |
AFAICT we need to make the |
Great work! |
Hi, I keep facing this issue with docker compose 2.15.1 with following setting
running
|
Description
Using multiple replicas of a container where each replica should use one of the ports selected by a port-range:
When starting up these containers with docker-compose V1 the container instances use port-mapping where each container picks one host-port from the selected port range to map to internal container port.
When starting up these containers with docker-compose V2 the containers use all ports from the selected port range to map to internal container port, resulting in error like the following for the second instance of that service:
Error response from daemon: driver failed programming external connectivity on endpoint docker-compose-issue_dummy_1 (6d9cff4937b3b6946e0bb949a36362cf91477f841be34ac9bd2693453b6e8837): Bind for 0.0.0.0:6009 failed: port is already allocated
Steps to reproduce the issue:
docker-compose disable-v2
docker-compose up -d
docker-compose ps
docker-compose down
docker-compose enable-v2
docker-compose up -d
Describe the results you received:
docker-compose.yaml only seems to work for V1 and not V2.
Describe the results you expected:
I would expect that docker-compose.yaml can be run by V1 and V2 alike.
Output of
docker version
:Output of
docker info
:Additional environment details (AWS ECS, Azure ACI, local, etc.):
local, MacOS BigSur 11.4
The text was updated successfully, but these errors were encountered: