Acredito que o problema aqui é que localhost
não é o host do seu banco de dados. Se esse script PHP estiver sendo executado no contêiner docker "www", localhost
provavelmente não terá um servidor MySQL de escuta. IIRC, o erro "arquivo não encontrado" do mysqli é devido a não encontrar o soquete do MySQL em localhost
. Eu também não vejo que você está expondo quaisquer portas para a imagem "db", por isso não tenho certeza como "www" deve se conectar a um banco de dados em execução dentro dele.
Você gostaria de descobrir qual é o endereço do contêiner docker "db" e em qual porta ele está escutando. Em seguida, faça referência a isso em sua função mysqli_connect()
. Um método mais fácil, se você tiver uma versão recente do docker, seria adicionar seus contêineres à mesma rede do Docker e referenciá-los pelo nome.
EDIT: rede do Docker
Você deve ler o recurso de na documentação oficial , pois é muito útil. Você provavelmente pode usar o seguinte docker-compose.yml (não testado):
version: '3.1'
services:
db:
image: mysql
restart: always
environment:
- MYSQL_DATABASE=mgsv
- MYSQL_USER=mgsv_user
- MYSQL_PASSWORD=mgsvpass
- MYSQL_ROOT_PASSWORD=mysql123
volumes:
- ./mysql:/docker-entrypoint-initdb.d
networks:
- web-db-net
www:
build: ./mGSV
restart: always
ports:
- 8080:80
networks:
- web-db-net
networks:
web-db-net:
Em seguida, altere sua linha de conexão para se referir ao contêiner db pelo nome (você também precisaria especificar a porta se não estiver usando o padrão do MySQL, 3306):
$con = mysqli_connect("db","mgsv_user","mgsvpass","mgsv");
EDIT2: docker-compose.yml fixo para que as redes realmente funcionem