Claims
Claims

Reputation: 270

Access index.php from docker

I've created a docker with a database and a php server but I'm failing accessing the php file from the server.

For testing purpose I'm currently having 2 index.php in my test app ./index.php and ./app/index.php

This is my docker-compose.yml

version: '3'
services:
  symfony:
    build:
      context: .
      dockerfile: docker/Dockerfile
    image: project-manager
    ports:
      - 80:80
  db:
    image: mysql
    ports:
      - 3306:3306
    volumes:
      - "./.data/db:/var/lib/mysql"
    environment:
      MYSQL_ROOT_PASSWORD: root

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
      - "8080:80"
    links:
      - db

This is the php dockerfile

FROM php:7.4-fpm

# Install Composer
COPY --from=composer /usr/bin/composer /usr/bin/composer

# Copy all our files in the docker root
COPY . /

docker ps

CONTAINER ID        IMAGE                   COMMAND                  CREATED              STATUS              PORTS                               NAMES
f80a16af8336        project-manager         "docker-php-entrypoi…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, 9000/tcp        project-manager_symfony_1
d97688010adf        phpmyadmin/phpmyadmin   "/docker-entrypoint.…"   9 minutes ago        Up 9 minutes        0.0.0.0:8080->80/tcp                project-manager_phpmyadmin_1
55781c004031        mysql                   "docker-entrypoint.s…"   9 minutes ago        Up 9 minutes        0.0.0.0:3306->3306/tcp, 33060/tcp   project-manager_db_1

In my /etc/hosts

#Project Manager
127.0.0.1 project-manager.local

I can successfully access to the phpmyadmin using project-manager.local:8080

But if I try the simple project-manager.local/ or project-manager.local/index I've got an empty response.

Upvotes: 1

Views: 2916

Answers (1)

atline
atline

Reputation: 31584

Root cause:

For symfony, you bind 80:80, this means you suppose there is a port 80 open in the php container. But, you use php:7.4-fpm which will just open port 9000.

(If you install net-tools in the container & use netstat -oanltp to check, there won't be 80 port open.)

Solutions:

Option 1:

If you insist to use php-fpm, then you need another web server container to pass the 80 request to php container's 9000 port. Maybe could add a more service with nginx container, and refers to connecting-nginx-to-php-fpm to set your configure for nginx container:

fastcgi_pass symfony:9000;

Option 2:

Switch to use php:7.4-apache, which defaults has a web server in the image open the 80 port, like next:

Dockerfile:

FROM php:7.4-apache
COPY . /var/www/html

index.php:

<?php
phpinfo();

NOTE: you should copy files to /var/www/html.

In a word, you should assure the container which you expose 80:80 really have a port 80 open in the container, otherwise, your expose is useless...

Upvotes: 2

Related Questions