Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

PHP não pode resolver o nome do contêiner mysql sob certas circunstâncias


Como você está perdendo a vinculação você db container com php. Quando você vincula o db com o PHP, ele estará acessível a partir do localhost do PHP.

Aqui está eu modifiquei seu arquivo docker-compose, pois gosto de alpino em todos os lugares;). E eu uso adminer e link com db para verificar a conexão em vez de verificar o nível de código. Como eu não tenho o arquivo php docker, estou criando php:alpine que contém php7.
version: "3"
services:
  nginx:
    image: nginx:1.13-alpine
    container_name: nginx
    ports:
      - "8081:80"
    command: nginx -g "daemon off;"
  db:
    image: mysql:5.5
    environment:
      MYSQL_ROOT_PASSWORD: example

  php:
    image: php:alpine
    container_name: php
    tty: true
    links:
     - db 
  adminer:
    image: adminer
    container_name: adminer
    ports:
      - 8080:8080
    links:
     - db 

Então eu instalei o mysqli no contêiner php
docker exec -it php ash

e execute abaixo do comando
docker-php-ext-install mysqli;

Em seguida, crie test.php

aqui o nome do servidor é db . Observe que o nome do seu servidor será o nome do contêiner db, que é um link para php.se você ping db no contêiner php, ele fará ping no contêiner db.
    <?php
$servername = "db";
$username = "root";
$password = "example";

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

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

Agora execute este arquivo no contêiner php. Você pode montar e executar seu código php, mas isso é o que eu fiz para testar. E eu tentei como usuário root.
php -f test.php



E aqui está o administrador que também liga com o db