首页 > 解决方案 > 将 Laravel Websocker 与 docker/docker-compose.yml 一起使用不起作用

问题描述

我正在开发一个 Laravel 应用程序。我正在尝试在我的应用程序中使用 Laravel Websocket,https: //docs.beyondco.de/laravel-websockets 。我正在使用 Docker/docker-compose.yml。由于 Laravel Websocket 在端口 6001 上本地运行,因此我在将其与 docker-compose 集成时遇到了问题。搜索解决方案我找到了这个链接,https://github.com/laradock/laradock/issues/2002。我试过但没有用。这就是我所做的。

我在项目根目录下创建了一个名为 workspace 的文件夹。在该文件夹中,我创建了一个名为 Dockerfile 的文件。

这是 Dockerfile 的内容

EXPOSE 6001

在 docker-compose.yml 文件中,我添加了这个内容。

workspace:
    port:
      - 6001:6001

我的 docker-compose.yml 文件看起来像这样

version: "3"
services:
  workspace:
    port:
      - 6001:6001
  apache:
    container_name: web_one_apache
    image: webdevops/apache:ubuntu-16.04
    environment:
      WEB_DOCUMENT_ROOT: /var/www/public
      WEB_ALIAS_DOMAIN: web-one.localhost
      WEB_PHP_SOCKET: php-fpm:9000
    volumes: # Only shared dirs to apache (to be served)
      - ./public:/var/www/public:cached
      - ./storage:/var/www/storage:cached
    networks:
      - web-one-network
    ports:
      - "80:80"
      - "443:443"
  php-fpm:
    container_name: web-one-php
    image: php-fpm-laravel:7.2-minimal
    volumes:
      - ./:/var/www/
      - ./ci:/var/www/ci:cached
      - ./vendor:/var/www/vendor:delegated
      - ./storage:/var/www/storage:delegated
      - ./node_modules:/var/www/node_modules:cached
      - ~/.ssh:/root/.ssh:cached
      - ~/.composer/cache:/root/.composer/cache:delegated
    networks:
      - web-one-network

当我运行“docker-compose up --build -d”时,它给了我以下错误。

ERROR: The Compose file './docker-compose.yml' is invalid because:
Unsupported config option for services.workspace: 'port' (did you mean 'ports'?)

出了什么问题,我该如何解决?如何在 docker-compose 中使用 Laravel Web Socket?

我尝试从“端口”更改为“端口”,然后收到以下错误消息。

ERROR: The Compose file is invalid because:
Service workspace has neither an image nor a build context specified. At least one must be provided.

标签: phplaraveldockerwebsocketdocker-compose

解决方案


你的 Dockerfile 是错误的。Dockerfile 必须以文档中解释FROM <image>的指令开头。在您的情况下,运行现有图像可能就足够了,避免使用整个 Dockerfile 内容:php:<version>-cli

workspace:
    image: php:7.3-cli
    command: ["php", "artisan", "websockets:serve"]

当然,您还需要添加包含应用程序代码和合适网络的卷。如果你在你的服务前面添加一个反向代理,比如 Nginx,你不需要ports在你的workspace任何一个上导出。服务可以访问其他服务,只要它们在同一个网络中。


推荐阅读