Dockerfile和yml配置

时间:2019-12-19 18:32:15

标签: php docker

我使用docker(使用nginx-docker-nginx-php-mysql)作为运行PHP应用程序的环境。 我正在尝试将websocket添加到我的应用程序,并且在配置Dockerfile和docker-compose.yml时遇到一些困难

我在cmd.php中有服务器文件(位置:docker-nginx-php-mysql \ www \ ratchet_chatapp \ cmd.php):

<?php
require 'vendor/autoload.php';

use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use ChatApp\Chat;

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new Chat()
        )
    ),
    8090
);

$server->run();

我使用以下连接通过以下方法打开main.js上的Web套接字(位置:docker-nginx-php-mysql \ www \ ratchet_chatapp \ js \ main.js),

var conn = new WebSocket('ws://localhost:8090');
    conn.onopen = function(e) {
        console.log("Connection established!");
    };

我的Dockerfile(位置:docker-nginx-php-mysql \ php \ Dockerfile):

FROM php:7.3-fpm

RUN apt-get update && apt-get install -y libzip-dev libpng-dev git zip unzip libgd3 libgd-tools  libxml2 libxml2-dev mariadb-client && docker-php-ext-install pdo_mysql  mysqli gd soap zip

我的docker-compose.yml(位置:docker-nginx-php-mysql):

version: "3"

services:
  nginx:
    build: ./nginx/
    ports:
        - 80:80
    links:
        - php
    volumes:
        - ./www:/var/www/html 
    networks:
        uln:
         ipv4_address: 10.6.0.2

  php:
    build: ./php/
    expose:
        - 9000
        - 8090
    links:
        - mysql
    volumes:
        - ./www:/var/www/html 
    networks:
        uln:
         ipv4_address: 10.6.0.3

  app:
    image: php:7.3-fpm
    volumes:
        - ./www:/var/www/html
    command: "true"

  mysql:
    image: mysql:5.7
    ports:
        - 3306:3306
    volumes:
        - ./mysql:/var/lib/mysql
    environment:
        MYSQL_ROOT_PASSWORD: secret
        MYSQL_DATABASE: webprog 
        MYSQL_USER: webprog 
        MYSQL_PASSWORD: webprog
    networks:
        uln:
         ipv4_address: 10.6.0.4

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
        - 8080:80
    links:
        - mysql
    environment:
        PMA_HOST: mysql
    networks:
        uln:
         ipv4_address: 10.6.0.5

networks:
    uln:
     ipam:
        config:
         - subnet: 10.6.0.0/16

我尝试使用EXPOSE 8090配置Dockerfile并将其添加到yml,但仍然无法正常工作。 如何正确更改Dockerfile和yml?

谢谢!

1 个答案:

答案 0 :(得分:0)

您的容器8090端口已映射到localhost上的9000端口,因此您应尝试指向localhost:9000来访问容器的websocket端口,即ws:// localhost:9000