为什么我无法启动代理服务?绑定 0.0.0.0:8000 失败:端口已分配
Why I can not start proxy service? Bind for 0.0.0.0:8000 failed: port is already allocated
这是我的docker-撰写-proxy.yml
version: "3.7"
services:
app:
build:
context: .
ports:
- "8000:8000"
volumes:
- ./app:/app
- static_data:/vol/web
environment:
- DB_HOST=db
- DB_NAME=app
- DB_USER=postgres
- DB_PASS=supersecretpassword
- ALLOWED_HOSTS=127.0.0.1
depends_on:
- db
proxy:
image : proxy:latest
depends_on:
- app
ports:
- "8000:8000"
volumes:
- static_data:/vol/static_data
db:
image: postgres:10-alpine
environment:
- POSTGRES_DB=app
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=supersecretpassword
volumes:
static_data:
我在 运行 我的命令
之前检查了端口
netstat -ltnp | grep ':8000'
而且端口没有被占用。
当我去
docker-compose -f docker-compose-proxy.yml up
我收到错误
ERROR: for 9bac48e03668_recipe-app-api-devops_proxy_1 Cannot start service proxy: driver failed programming external connectivity on endpoint recipe-app-api-devops_proxy_1 (af5860c135cb37026dcac6ce27151cd4e8448eaddc542d50dcd009c0e24c09fa): Bind for 0.0.0.0:8000 failed: port is already allocated
为什么?如何解决这个问题?
您在
指定了端口8000
ports:
- "8000:8000"
由于此端口已被用于某些用途,您会收到它已被分配的错误消息。因此,您需要找出正在使用端口 8000
的内容,然后更改容器的端口、停止其他进程或更改其他进程的端口。
您正在尝试将主机端口 8000 绑定到两个不同的东西:
services:
app:
ports:
- "8000:8000"
proxy:
ports:
- "8000:8000"
所以这告诉 Compose 尝试将主机端口 8000 路由到 app
容器,并将主机端口 8000 路由到 proxy
容器,它不能同时执行这两项操作。这基本上就是您遇到的错误。
如果您希望系统的所有请求都通过 proxy
容器,您只需从 app
容器中删除 ports:
块。它仍然可以通过 http://app:8000
从同一 Compose 文件中的其他容器中看到,但无法从外部访问 Docker.
如果您需要两个容器都可以访问,则需要更改其中一个容器上的第一个 ports:
编号,而不是第二个编号。
ports:
- '8001:8000' # host port 8001 -> container port 8000
这根本不会影响容器之间的连接;无论 ports:
存在或不存在,他们将始终使用他们尝试连接的容器的“标准”端口号。
这是我的docker-撰写-proxy.yml
version: "3.7"
services:
app:
build:
context: .
ports:
- "8000:8000"
volumes:
- ./app:/app
- static_data:/vol/web
environment:
- DB_HOST=db
- DB_NAME=app
- DB_USER=postgres
- DB_PASS=supersecretpassword
- ALLOWED_HOSTS=127.0.0.1
depends_on:
- db
proxy:
image : proxy:latest
depends_on:
- app
ports:
- "8000:8000"
volumes:
- static_data:/vol/static_data
db:
image: postgres:10-alpine
environment:
- POSTGRES_DB=app
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=supersecretpassword
volumes:
static_data:
我在 运行 我的命令
之前检查了端口netstat -ltnp | grep ':8000'
而且端口没有被占用。 当我去
docker-compose -f docker-compose-proxy.yml up
我收到错误
ERROR: for 9bac48e03668_recipe-app-api-devops_proxy_1 Cannot start service proxy: driver failed programming external connectivity on endpoint recipe-app-api-devops_proxy_1 (af5860c135cb37026dcac6ce27151cd4e8448eaddc542d50dcd009c0e24c09fa): Bind for 0.0.0.0:8000 failed: port is already allocated
为什么?如何解决这个问题?
您在
指定了端口8000
ports:
- "8000:8000"
由于此端口已被用于某些用途,您会收到它已被分配的错误消息。因此,您需要找出正在使用端口 8000
的内容,然后更改容器的端口、停止其他进程或更改其他进程的端口。
您正在尝试将主机端口 8000 绑定到两个不同的东西:
services:
app:
ports:
- "8000:8000"
proxy:
ports:
- "8000:8000"
所以这告诉 Compose 尝试将主机端口 8000 路由到 app
容器,并将主机端口 8000 路由到 proxy
容器,它不能同时执行这两项操作。这基本上就是您遇到的错误。
如果您希望系统的所有请求都通过 proxy
容器,您只需从 app
容器中删除 ports:
块。它仍然可以通过 http://app:8000
从同一 Compose 文件中的其他容器中看到,但无法从外部访问 Docker.
如果您需要两个容器都可以访问,则需要更改其中一个容器上的第一个 ports:
编号,而不是第二个编号。
ports:
- '8001:8000' # host port 8001 -> container port 8000
这根本不会影响容器之间的连接;无论 ports:
存在或不存在,他们将始终使用他们尝试连接的容器的“标准”端口号。