Не удается подключиться к MySQL с именем контейнера Docker, но можно подключиться с помощью localhost - PullRequest
0 голосов
/ 24 июня 2019

Я не могу подключиться к MySQL, используя имя контейнера Docker в строке подключения, но могу подключиться к localhost.

докер-Compose:

 mysql-docker-container:
    image: mysql:latest
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=test
      - MYSQL_PASSWORD=test
    ports:
      - 3306:3306
    volumes:
      - /data/mysql

  app:
    image: app
    build:
      context: ./
      dockerfile: Dockerfile
    depends_on:
      - mysql-docker-container

links:
  - mysql-docker-container:mysql-docker-container
ports:
  - 9090:9090
volumes:
  - /data/p2c-app
environment:
  - DATABASE_HOST=mysql-docker-container
  - DATABASE_USER=testuser
  - DATABASE_PASWORD=testuser
  - DATABASE_NAME=test
  - DATABASE_PORT=3306

spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&allowPublicKeyRetrieval=true

Выше работает, но я хочу с именем контейнера, как показано ниже - я получаю ОТКАЗ ОТ СОЕДИНЕНИЯ

spring.datasource.url=jdbc:mysql://mysql-docker-container:3306/test?useSSL=false&allowPublicKeyRetrieval=true

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 24 июня 2019

Вы можете обновить /etc/hosts, если локальное соединение работает.

127.0.0.1   localhost  mysql-docker-container

Чтобы проверить, доступен ли mysql-docker-container из контейнера приложения, вы можете открыть tty и ping.

docker exec -it app_container_name bash
ping mysql-docker-container
0 голосов
/ 24 июня 2019

Все в порядке.
Кажется, служба базы данных работает, но mysql находится в процессе запуска.
И служба приложений запускается тогда и не может связаться с базой данных.

В этой ситуации есть несколько обходных путей.
Но самое простое, что вы добавляете ниже к сервису приложения.

restart: on-failure

И обратите внимание, что раздел depends_on означает только в контексте контейнера Docker, а не в базовых службах.

...