Accedere al dock di endpoint api

Ho costruito un semplice endpoint api usando symfony / fosrest ecc. Posso accedervi tramite build symfony in server cioè: server php bin/console server:run .

Ora voglio accedere api nel docker. Ho creato docker-compose.yml con php-apache e mysql image. Ora, quando cerco di connettersi agli endpoint come segue, ottengo l'errore proibito (403). Suppongo che la mia configuration apache in docker php-apache image non sia corretta. Qualcuno può aiutarmi a risolvere questo problema. Grazie.

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

L'errore è il seguente.

 <!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> 

* EDIT – 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: 

RISPOSTA :

eseguire la seguente attività nell'applicazione symfony.

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

E modificare le porte dell'applicazione docker a 8000:8000 in docker-compose.yml

Adesso dovresti essere in grado di accedere all'endpoint come segue.

 POST http://192.168.99.100/api/myendpoint 

Il tuo indirizzo IP docker può essere diverso da quello.

Dovresti davvero fornire il tuo docker-compose.yml per aiutare a diagnosticare il problema, ma direi che questo è uno o più dei seguenti problemi (lo so perché ho probabilmente fatto tutti loro sbagliati anche in un certo punto):

  • Il command php bin/console server:run non funziona perché non viene eseguito nella directory di destra. I registri sul docker-composer up vi mostreranno questo e il contenitore non avrebbe potuto iniziare

  • Il server sta ascoltando la port predefinita di 8000 e non accetta le connessioni dall'esterno dell'indirizzo loopback. È ansible fornire un IP e un combo di port come un argomento al server: eseguire per ignorarlo. Vedere Uso del server Web incorporato da una macchina virtuale nei documenti di Symfony

  • Il mapping della port non è corretto in docker-compose.yml , dovrebbe utilizzare la port utilizzata nel command server:run .

  • Hai apache o un altro server web in esecuzione nella macchina host che sta producendo la pagina che vedi