php artisan 服务后在端口 8000 上获取 PHP 容器

Sal*_*vio 2 php port laravel docker

即使在 docker-compose.yml 文件中添加端口映射后,我也无法使用容器来侦听端口 8000。

所有相关文件都可以在这里找到: https: //github.com/salvatore-esposito/laravel-dockerized

我运行了以下命令:docker-compose exec app php artisan serve并且它已成功运行。

无论如何,如果我进入容器内部,curl 会按预期工作,但从外部不起作用。连接被拒绝。

我使用获取ipdocker-machine ip

请注意,我通过 docker-compose.yml 映射了容器中的外部-内部端口,即使在存储库中没有映射。

我尝试将所有文​​件复制到构建的映像并启动:

docker run --rm -p 8000:8000 --name laravel salvio/php-laravel php artisan serve

docker exec -it laravel bash

再一次,如果运行“curl localhost:80”和“curl localhost:8000”,前者不起作用,后者起作用,而如果我通过 docker检查 name_container 和数字curl ip_of_container:8000获取容器的ip则什么也没有。

Maa*_*Dev 6

使用docker-compose exec命令时,它会一直运行,直到交互式会话停止(通过使用ctrl-c或关闭终端),因为它不作为服务运行。为了能够保持以下命令运行

docker-compose exec app php artisan serve
Run Code Online (Sandbox Code Playgroud)

您必须打开 2 个终端,其中 1 个使用命令,1 个用于连接到容器并 ping 端口8000

如果您想访问容器端口 8000,您必须在Dockerfile8000中公开该端口:

# rest of docker file
# Copy existing application directory permissions
#COPY --chown=www-data:www-data ./code /var/www/html

# Change current user to www-data
#USER www-data

# Expose port 9000 and start php-fpm server
EXPOSE 80
EXPOSE 80000
Run Code Online (Sandbox Code Playgroud)

并将其映射到您的主机docker-compose文件)中:

app:
    build:
      context: .
      dockerfile: .config/php/Dockerfile
    image: salvio/php-composer-dev
    container_name: app
    restart: unless-stopped
    tty: true
    environment:
      SERVICE_NAME: app
      SERVICE_TAGS: dev
    working_dir: /var/www/html
    ports:
      - "80:80"
      - "8000:8000"
    volumes:
      - ./code/:/var/www/html
      - .config/php/php.ini:/usr/local/etc/php/conf.d/local.ini
    networks:
      - myproject-network
Run Code Online (Sandbox Code Playgroud)

请记住php artisan serve绑定到localhost:8000. 这意味着只能在容器内访问它。使用

php artisan serve --host 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

绑定到共享网络接口。查看以下资源:

  1. /sf/answers/3781592741/
  2. 如何对 WebSocket 服务器进行 docker 化?