我开发了一个应用程序,它使用了四个Docker容器(php7.0-fpm,nginx,mysql和phpmyadmin),这些容器曾经在本地(MacOS)和我的VPS(Debian 9 Stretch)上运行。昨天我在我的docker-compose文件中添加了端口80到我的nginx配置,以确保nginx可以强制http流量到https。这可以像我预期的那样在本地工作,但是当我在我的VPS上提取更改时,我在运行docker-compose up --build
时收到以下消息:
错误:对于my_nginx无法启动服务nginx:驱动程序失败 在端点my_nginx上编程外部连接 (ff89cec0a968850919eebabe9e003c0bd4e65205eb6f3c3dd286037b3a1745fc): 启动userland代理时出错:listen tcp 0.0.0.0:80:listen:address 已经在使用
错误:对于nginx无法启动服务nginx:驱动程序失败 在端点my_nginx上编程外部连接 (ff89cec0a968850919eebabe9e003c0bd4e65205eb6f3c3dd286037b3a1745fc): 启动userland代理时出错:listen tcp 0.0.0.0:80:listen:address 已经在使用
奇怪的是,当我在本地运行命令时,一切正常。
在 docker-compose.yml
的内容下方version: "2.0"
services:
nginx:
build: ./nginx/
ports:
- 443:443
- 80:80
volumes:
- ${APPLICATION_ROOT}:/${WEBROOT}
- ./ssl:/etc/nginx/ssl
- ./nginx/config/default.conf:/etc/nginx/conf.d/default.conf
restart: always
depends_on:
- php
environment:
ENVIRONMENT: "${APPLICATION_ENV}"
URL: "${APPLICATION_URL}"
container_name: my_nginx
php:
build: ./php/
ports:
- 8080:80
volumes:
- ${APPLICATION_ROOT}:/${WEBROOT}
restart: always
depends_on:
- mysql
environment:
ENVIRONMENT: "${APPLICATION_ENV}"
URL: "${APPLICATION_URL}"
MYSQL_HOST: "${DB_HOST}"
MYSQL_DATABASE: "${DB_NAME}"
MYSQL_USER: "${DB_USERNAME}"
MYSQL_PASSWORD: "${DB_PASSWORD}"
container_name: my_php
mysql:
build: ./mysql/
volumes:
- ./db:/var/lib/mysql
restart: always
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
MYSQL_HOST: "${DB_HOST}"
MYSQL_DATABASE: "${DB_NAME}"
MYSQL_USER: "${DB_USERNAME}"
MYSQL_PASSWORD: "${DB_PASSWORD}"
explicit_defaults_for_timestamp: 1
container_name: my_db
phpmyadmin:
build: ./phpmyadmin/
restart: always
depends_on:
- mysql
ports:
- 8181:80
environment:
PMA_HOST: my_db
MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
MYSQL_USERNAME: "${DB_USERNAME}"
MYSQL_PASSWORD: "${DB_PASSWORD}"
container_name: my_phpmyadmin
有人知道我在这里缺少什么吗?我已经尝试将php端口更改为8282:80
,但这也不起作用(我真的不明白端口和所有工作方式)。为什么它在我的Mac上本地工作?
答案 0 :(得分:0)
错误,如果你读了,就说明了一切:
地址已在使用
有些东西已经在端口80
上侦听了。如果您运行netstat -pln | grep 80
,它将显示哪个进程正好阻止您的端口。然后,您可以kill -9
并构建容器,没有错误。