Я создал докер с базой данных и php-сервером, но мне не удается получить доступ к php-файлу с сервера.
В целях тестирования у меня в настоящее время есть 2 index.php в моем тестовом приложении ./index.php и ./app/index.php
Это мой 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
Это файл докеры php
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
В моем /etc/hosts
#Project Manager
127.0.0.1 project-manager.local
Я могу успешно получить доступ к phpmyadmin, используя project-manager.local:8080
Но если я попробую простой project-manager.local/ или project-manager.local/index
У меня пустой ответ.
docker/Dockerfile — это файл докеров, который я добавляю в проблему, если я подключаюсь к этому одному php, он хорошо установлен в контейнере. Но, может быть, мне нужно что-то указать для запуска сервера? Но больше всего меня беспокоит то, что когда я подключаюсь к контейнеру f80a16af8336... index.php отсутствует. У меня есть только пустая папка /var/www/html
Два ваших контейнера выставляют порт 80, это само по себе не сработает...
вы копируете свои файлы в корень контейнера /, поэтому ваш index.php файл находится в корне контейнера, и вы увидите, как это делается ls /
Действительно @Nathanael спасибо. Так что теперь мне просто нужно выяснить, как заставить работать php :)
@LarsStegelitz Я не понимаю, что ты имеешь в виду. Я привязываю свой 80 к док-контейнеру 80 symfony. И я привязываю свой 8080 к 80 контейнера phpmyadmin. Поскольку они не являются одним и тем же контейнером, это не должно быть проблемой, ведь у них один и тот же порт, верно?






Первопричина:
Для symfony вы связываете 80:80, это означает, что вы предполагаете, что в php-контейнере открыт порт 80. Но вы используете php:7.4-fpm, который просто откроет порт 9000.
(Если вы установите net-tools в контейнер и используете netstat -oanltp для проверки, 80 порт не будет открыт.)
Решения:
Опция 1:
Если вы настаиваете на использовании php-fpm, вам нужен еще один web server container, чтобы передать 80 request в php container порт 9000. Возможно, можно было бы добавить еще один сервис с контейнером nginx и ссылаться на подключение-nginx-to-php-fpm, чтобы настроить конфигурацию для контейнера nginx:
fastcgi_pass symfony:9000;
Вариант 2:
Переключитесь на использование php:7.4-apache, по умолчанию веб-сервер на изображении открывает порт 80, как показано ниже:
Докерфайл:
FROM php:7.4-apache
COPY . /var/www/html
индекс.php:
<?php
phpinfo();
ПРИМЕЧАНИЕ: вы должны скопировать файлы в /var/www/html.
Одним словом, вы должны убедиться, что контейнер, который вы выставляете 80:80, действительно имеет порт 80, открытый в контейнере, иначе ваш выставление бесполезно...
Любая идея, что может вызвать 403 запрещенный доступ после настройки контейнера с помощью php: 7.4-apache? Обновлено: Мой плохой wwas просто на неправильном пути :) Все хорошо.
В вашем файле docker-compose нет php-контейнера