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

时间:2019-08-24 15:08:26

标签: php laravel docker port

即使在我的docker-compose.yml文件中添加了端口映射之后,我也无法通过容器监听8000端口。

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

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

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

我使用docker-machine ip

获取了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来获取容器的ip,则检查一下name_container和数字curl ip_of_container:8000什么都没有。

1 个答案:

答案 0 :(得分:2)

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

docker-compose exec app php artisan serve

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

如果要访问容器端口8000,则必须在Dockerfile中暴露端口8000

# 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

并将其映射到docker-composefile)中的主机:

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

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

php artisan serve --host 0.0.0.0

绑定到共享网络接口。签出以下资源:

  1. https://stackoverflow.com/a/54022753/6310593
  2. How do you dockerize a WebSocket Server?