2016-04-02 18 views
6

Mam plik dokowania do tworzenia obrazu mysql i wystawiać port do 3306, ale kiedy próbuję zainstalować CMS, daje mi błąd, że nie może połączyć się z bazą danych. Próbuję zeskanować port 3306 i pokazuje mi, że jest otwarty, więc działa mysql.Docker mysql cant połączyć się z kontenerem

Dlaczego dwa kontenery doków nie widzą się nawzajem?

Oto mój plik doker-komponować:

phpfpm: 
    restart: always 
    extends: 
    file: php-fpm-5.6.yml 
    service: phpfpm 
    links: 
    - db:db 

nginx: 
    restart: always 
    image: nginx 
    ports: 
    - "8000:80" 
    links: 
    - phpfpm:phpfpm 
    volumes: 
    - ./nginx/vhost.conf:/etc/nginx/conf.d/default.conf 
    - ./app:/var/www/html 
    - ./log/nginx:/var/log/nginx 

db: 
    restart: always 
    image: mysql 
    ports: 
    - "3306:3306" 
    environment: 
    MYSQL_ROOT_PASSWORD: 123456 
    MYSQL_USER: user 
    MYSQL_PASSWORD: password 
    MYSQL_DATABASE: database 
+0

Próbuję na serwerze i ze stałym IP i jest dobry. Ale co jest nie tak z localhost/127.0.0.1? –

Odpowiedz

14

Aby połączyć się z bazą danych, należy wybrać link/alias podany jako hosta. Więc CMS można podłączyć do MySQL za pomocą db jako hosta i port 3306.

nie będzie w stanie połączyć się z localhost lub 127.0.0.1, ponieważ „localhost” jest localhost wewnątrz każdy pojemnik, więc , używając "localhost" w kontenerze phpfpm spróbuję połączyć się z bazą danych MySQL w kontenerze phpfpm, ale nie ma tam uruchomionego serwera.

pamiętać, że nie trzeba publikować ("3306":"3306") porty MySQL, jeśli tylko połączyć się z bazą danych od wewnątrz połączonych kontenerów. Publikowanie portów udostępnia MySQL na publicznym interfejsie sieciowym, którym może być "Internet".

+2

Naprawiłem problem z zamianą "localhost" na "db". Dziękuję za poświęcony czas i całą pomoc :) –

Powiązane problemy