Docker容器不会加载到本地工作的VPS(Debian)中

时间:2017-10-26 10:15:30

标签: docker nginx

我开发了一个应用程序,它使用了四个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上本地工作?

1 个答案:

答案 0 :(得分:0)

错误,如果你读了,就说明了一切:

  

地址已在使用

有些东西已经在端口80上侦听了。如果您运行netstat -pln | grep 80,它将显示哪个进程正好阻止您的端口。然后,您可以kill -9并构建容器,没有错误。