sql >> Database teknologi >  >> RDS >> Mysql

PHP kan ikke løse mysql containernavn under visse omstændigheder

Som du mangler link du db container med php. Når du forbinder db med PHP, vil det være tilgængeligt fra localhost af PHP.

Her er jeg ændret din docker-compose fil, da jeg kan lide alpine overalt;). Og jeg bruger adminer og link med db for at bekræfte forbindelsen i stedet for kontrol af kodeniveau. Da jeg ikke har din php docker-fil, så laver jeg php:alpine, som indeholder 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 

Så installerede jeg mysqli i php container

docker exec -it php ash

og kør under kommandoen

docker-php-ext-install mysqli;

Opret derefter test.php

her er servernavnet db . Bemærk, at dit servernavn vil være det, der er db containernavn, som er link til php.hvis du ping db i php-container vil den pinge db-container.

    <?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";
?>

Kør nu denne fil i php container. Du kan montere og køre din php-kode, men dette er, hvad jeg gjorde for at teste. Og jeg prøvede som root-bruger.

php -f test.php

Og her er adminer som også linker med db



  1. Dato/tidsstempel for at registrere, hvornår en post blev tilføjet til tabellen?

  2. Tuples er ikke indsat sekventielt i databasetabellen?

  3. Forskellen mellem 'AND' og '&&' i SQL

  4. MYSQL sum() for forskellige rækker