【问题标题】:Access rest api endpoint docker访问rest api端点docker
【发布时间】:2017-01-04 10:02:20
【问题描述】:

我已经使用 symfony/fosrest 等构建了简单的 api 端点。我可以通过服务器中的 symfony 构建访问它,即:php bin/console server:run

现在我想在 docker 中访问 api。我用 php-apache 和 mysql 映像创建了 docker-compose.yml。现在,当我尝试按如下方式连接到端点时,出现禁止 (403) 错误。我假设我在 docker php-apache 映像中的 apache 配置不正确。谁能帮我解决这个问题。谢谢。

endpoint: POST http://192.168.99.100/api/myendpoint

错误如下。

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /api/myendpoint on this server.<br />
</p>
<hr>
<address>Apache/2.4.12 (Ubuntu) Server at 192.168.99.100 Port 80</address>
</body></html>

*编辑 - docker-compose.yml

version: "2"
services:
  myapp:
      build: ./docker
      image: php5.6-apache
      container_name: myapp
      ports:
          - "80:80"
      volumes:
          - .:/app
          - $HOME/.composer/cache:/root/.composer/cache
      working_dir: /app
      links:
          - mymysql
      environment:
          - APPLICATION_ENV=test

  mymysql:
      image: mysql:5.6
      container_name: mymysql
      ports:
          - "3306:3306"
      volumes:
          - data:/var/lib/mysql
      environment:
          - MYSQL_USER=root
          - MYSQL_PASSWORD=password
          - MYSQL_DATABASE=db
          - MYSQL_ROOT_PASSWORD=password

volumes:
  data:

回答

在您的 symfony 应用程序中运行以下命令。

docker exec -it your_container_name php bin/console server:run 0.0.0.0:8000

并在 docker-compose.yml 中将您的 docker 应用程序端口更改为 8000:8000

现在您应该可以按如下方式访问您的端点了。

POST http://192.168.99.100/api/myendpoint 

您的 docker IP 地址可能与我的不同。

【问题讨论】:

    标签: php apache rest symfony docker


    【解决方案1】:

    您确实应该提供您的 docker-compose.yml 来帮助诊断问题,但我会说这是以下一个或多个问题(我知道是因为我可能在某些时候也做错了所有这些问题) :

    • 命令php bin/console server:run 失败,因为它没有在正确的目录中运行。 docker-composer up 上的日志会向您显示这一点,并且容器将无法启动

    • 您的服务器正在侦听默认端口 8000,并且不接受来自环回地址之外的连接。您可以提供 IP 和端口组合作为 server:run 的参数来覆盖它。请参阅 Symfony 文档中的 Using the built-in Web Server from inside a Virtual Machine

    • 您在docker-compose.yml 中的端口映射不正确,它应该使用您在server:run 命令中使用的端口。

    • 您在主机上运行 apache 或其他网络服务器,该服务器正在生成您看到的页面

    【讨论】:

    • 添加了 docker-compose.yml。谢谢我已经按照你的提示解决了这个问题。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 2016-04-20
    • 2022-10-21
    相关资源
    最近更新 更多