Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

docker-compose.yml para rodar uma aplicação php com mysql

Ttenho esse docker-compose.yml que fiz para rodar uma aplicação php e com mysql, acessar ela a partir de containers como se fosse um servidor. Porém estou tendo problemas e dificuldades, os volumes da pasta não são criados, e o php quando acesso a porta 80 que mapeei fica somente com o forbidden. Alguem pode me ajudar.

docker-compose.yml

version: '3'

services:
  apache:
    image: 'php:7.2-apache'
    container_name: php
    restart: always
    ports:
      - '80:80'
    depends_on:
      - mysqldb
    links:
      - mysqldb   

  mysqldb:
    container_name: mysqlASW
    image: mysql:5.7
    restart: always
    ports:
      - '3307:3306'
    environment:
      - MYSQL_ROOT_PASSWORD=root 
      - MYSQL_DATABASE=biblioteca
6 respostas

Oi Daniel, tente usar o arquivo docker-compose.yml abaixo. Repare a declaracao do volumes no service apache:

version: '3'

services:
  apache:
    image: 'php:7.2-apache'
    container_name: php
    restart: always
    ports:
      - '80:80'
    volumes:
      - ./html:/var/www/html
    depends_on:
      - mysqldb
    links:
      - mysqldb

  mysqldb:
    container_name: mysqlASW
    image: mysql:5.7
    restart: always
    ports:
      - '3307:3306'
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=biblioteca

Para funcionar, crie na pasta onde tem os esse docker-compose.yml um noso diretorio html. Nele crie um index.html com algum conteudo para testar. Inicialize os containers e teste: http://localhost

Deve mostrar o conteudo do seu index.html.

abs, Nico

Obrigado Nico!!!!! Valeu mesmo meu amigo, deu certinho aqui! Só te explorar mais um pouco rsrss. Como eu faço pra essa aplicação minha, conectar ao banco? No meu docker-compose.yml se voce viu, eu mapeei a porta '3307 para 3306 do mysql'. Não sei se isso ia funcionar, foi uma ideia que veio na cabeça, mas quando faço login na minha aplicação, da erro de conexão com o banco.

Pode me ajudar nessa amigo? Só falta essa parte de conexão

Abraços

Oi Daniel,

Para conectar o php com mysql tive que criar uma nova imagem pois na imagem padrao nao vem mysqli instalado.

Seguem os passos:

1) Criei um novo Dockerfile php7-apache2-dockerfile na mesma pasta do docker-compose.yml

FROM php:7.2-apache
WORKDIR /var/www/html
RUN docker-php-ext-install mysqli

Repare que pedi para instalar mysqli, baseado na imagem que vc usou.

2) Mexi no docker-compose.yml para gerar a imagem e container baseado no Dockerfile em cima:

version: '3'

services:
  apache:
    build:
      dockerfile: php7-apache2-dockerfile
      context: .
    image: seu-usuario/php7-apache2-dockerfile
    container_name: php7-apache2
    restart: always
    ports:
      - '80:80'
    volumes:
      - ./html:/var/www/html
    depends_on:
      - mysqldb
    links:
      - mysqldb

  mysqldb:
    container_name: mysqlASW
    image: mysql:5.7
    restart: always
    ports:
      - '3307:3306'
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=biblioteca

3) Testei a conexao no php (index.php):

<html>
<?php

echo 'Versão Atual do PHP: ' . phpversion();

$servername = "mysqlASW";
$username = "root";
$password = "root";

// Create connection
$conn = new mysqli($servername, $username, $password);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
echo "<br /> Connected successfully";
?>

</html>

Repare que usei o nome do container mysqlASW como servername.

Tudo bem?

abs

Massa demais nico, enfim, eu tive que apagar tudo por causa de outros erros aqui. Mas pegando agora o jeiro que voce fez, primeiramente tenho que rodar o dockerfile que voce criou? ai Só depois eu rodo o docker-compose.yml?

é esse o processo, começando do zero? Abraços

solução

A parte de image em docker-compose.yml estaassim: seu-usuario, é assi mesmo, ou eu tinha que colocar algum parametro?

Quando eu rodo o docker-compose.yml sem rodar o dockerfile, da esse erro:

Building apache ERROR: Cannot locate specified Dockerfile: php7-apache2-dockerfile

Oi Daniel,

o comando docker-compose up tbm builda a imagem, basta colocar o dockerfile na mesma pasta do arquivo docker-compose.yml.

Fica:

  • php7-apache2-dockerfile
  • docker-compose.yml
  • html
    • index.php

Ai só rodar:

docker-compose up

abs