【问题标题】:Docker container doesn't load in VPS (Debian) which does work locallyDocker 容器无法在本地工作的 VPS (Debian) 中加载
【发布时间】:2017-10-26 19:27:58
【问题描述】:

我开发了一个应用程序,它使用了四个 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): 启动用户态代理时出错:监听 tcp 0.0.0.0:80:监听:地址 已经在使用中

错误:对于 nginx 无法启动服务 nginx:驱动程序失败 在端点 my_nginx 上编程外部连接 (ff89cec0a968850919eebabe9e003c0bd4e65205eb6f3c3dd286037b3a1745fc): 启动用户态代理时出错:监听 tcp 0.0.0.0:80:监听:地址 已经在使用中

奇怪的是,当我在本地运行命令时,一切正常。

下面是我的 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 上本地工作?

【问题讨论】:

    标签: docker nginx


    【解决方案1】:

    如果您阅读了该错误,则说明了一切:

    地址已在使用中

    端口80 已经有东西在监听。如果您运行netstat -pln | grep 80,它将显示究竟是哪个进程阻塞了您的端口。然后你可以kill -9它并毫无错误地构建你的容器。

    【讨论】:

    • Apache 安装在我的 vps 上并监听端口 80,所以我让 nginx 监听端口 8001。这解决了它。谢谢
    猜你喜欢
    • 2022-07-25
    • 2023-04-01
    • 2016-02-11
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    • 2020-07-08
    • 2021-05-28
    • 2019-07-09
    相关资源
    最近更新 更多