【问题标题】:Docker container can't call localhost inside container itselfDocker 容器无法调用容器本身内部的本地主机
【发布时间】:2023-01-04 18:56:16
【问题描述】:

我有一个 docker-compose 环境设置。 但在服务“Lumen”内部,我试图向服务本身发出 CURL 请求。

但是,容器无法从 localhost:8000 或 lumen:8000 访问自身??

当我从服务调用 lumen:8000 时,它永远不会返回响应,只会继续加载(并且 curl 请求是针对不同的 url,因此没有无限循环)

在我的 Laravel 控制器中,我发现协议、主机和端口是:http://lumen:8000

我好像 Laravel 无法连接到自己,这是我的项目真正需要的。

我可以通过本地主机从我自己的计算机连接到 Laravel,但我需要 Laravel 自己调用它。

执行 CURL 请求后来自 Laravel 控制器的错误消息: Failed to connect to localhost port 8000 after 0 ms: Connection refused 将主机更改为“流明”只会使请求负载无限大。无论我尝试连接到哪个页面。

Docker-compose 文件:

version: "3.5"

services:
  lumen:
    expose: 
      - "8000"
    ports:
      - "8000:8000"
    volumes:
      - ./server:/var/www/html
      - ./server/vendor:/var/www/html/vendor/
    build: 
      context: server
      dockerfile: Dockerfile
    command: php -S lumen:8000 -t public
    restart: always
    privileged: true
    depends_on:
      - database
    networks:
      - database

  frontend:
    build:
      context: client
      dockerfile: Dockerfile
    volumes:
      - ./client/src:/app/src
    ports:
      - 3000:3000
    stdin_open: true
    #restart: always
    networks:
      - database

  # Database Service (Mysql)
  database:
    image: mysql:latest
    container_name: blogmoda_mysql
    environment:
      MYSQL_DATABASE: blogmoda-app
      MYSQL_USER: root
      MYSQL_PASSWORD: root
      MYSQL_ROOT_PASSWORD: root
    command: ['--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci','--default-authentication-plugin=mysql_native_password']
    ports:
      - "127.0.0.1:3306:3306"
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - database

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: dev_phpmyadmin
    links:
      - database
    environment:
      PMA_HOST: database
      PMA_PORT: 3306
      PMA_ARBITRARY: 1
    restart: always
    depends_on: 
      - database
    ports:
      - 9001:80
    networks:
      - database

volumes:
  db-data:

# Networks to be created to facilitate communication between containers
networks:
  database:

服务器 dockerfile:

FROM php:8.1-fpm-alpine

RUN apk update && apk add bash

RUN apk add chromium

RUN apk add --no-cache zip libzip-dev
RUN docker-php-ext-configure zip
RUN docker-php-ext-install zip
RUN docker-php-ext-install pdo pdo_mysql 
RUN docker-php-ext-install pdo_mysql
RUN docker-php-ext-install opcache

WORKDIR /var/www/html/

RUN php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer

COPY . .

RUN composer install --ignore-platform-req=ext-zip --ignore-platform-reqs

【问题讨论】:

    标签: php laravel docker docker-compose


    【解决方案1】:

    我相信 localhost 应该可以。假设 curl 安装在 lumen 中,在 lumen 服务下的撰写文件中,您可以尝试更改命令

    command: php -S lumen:8000 -t public
    

    通过 bash 直接卷曲为

    command: sh -c "curl -s localhost:8000"
    

    然后查看lumen容器的日志,看curl是否运行成功。

    【讨论】:

    • 感谢您的评论。 Curl 确实适用于所有其他网址,但 localhost:8000 在容器内不起作用(它应该)使用你的代码我得到“blogmoda-app-php_lumen_1 退出代码 7”(我认为这是因为你没有运行8000 端口的 lumen 服务 我已经用 lumen dockerfile 更新了帖子,我不知道它是否是容器设置或其他东西。
    【解决方案2】:

    试试0.0.0.0:8000而不是localhost:8000。有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      相关资源
      最近更新 更多