在 php artisan serve 后获取端口 8000 上的 PHP 容器

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

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

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

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

我使用获取了 ip docker-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 检查容器的 ip,检查 name_container 和 digit curl ip_of_container:8000 什么都没有。


紫衣仙女
浏览 396回答 1
1回答

至尊宝的传说

使用docker-compose exec命令时会一直运行,直到它的交互式会话停止(通过使用ctrl-c或关闭终端),因为它不是作为服务运行的。为了能够保持以下命令运行docker-compose exec app php artisan serve您必须打开 2 个终端,1 个使用命令,1 个连接到容器和 ping 端口 8000如果要访问容器端口 8000,则必须8000在Dockerfile 中公开该端口:# 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 serverEXPOSE 80EXPOSE 80000并将其映射到docker-compose( file ) 中的主机: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
打开App,查看更多内容
随时随地看视频慕课网APP