Как правильно связать два и более контейнеров docker

169
03 февраля 2019, 22:50

буду признателен за ответ. Цель развернуть два контейнера с базой и приложением и заставить приложение соединятся к бд. Сейчас проблема как раз соединении к бд из соседнего контейнера.

Первый это не много доработанный образ MySql и второй это мое приложение. Я сделал следующую структуру папок для контейнеров

project
    mysql
       config
           my.cnf
       scheme
           scheme.sql
       Dockerfile
    myapp
       app
          app.jar
       Dockerfile
    docker-compose.yaml

Я сделал следующие Dockerfiles для mysql и для своего приложения

для mysql

FROM mysql:8.0.12
COPY config/ /etc/mysql/
COPY scheme/ /docker-entrypoint-initdb.d/

для моего приложение

FROM openjdk:8-jdk-slim
COPY app/ /usr/src/myapp/
WORKDIR /usr/src/myapp
CMD tail -f /dev/null

В корне проекта создал docker-compose.yaml со следующим содержимым

version: '3'
services:
    mysql:
        build: ./mysql/
        container_name: mysqlbase
        ports:
            - "3600:3600"
        environment:
            MYSQL_ROOT_PASSWORD: "root_pass"
            MYSQL_USER: "user"
            MYSQL_PASSWORD: "userpass"
            MYSQL_DATABASE: "Base"
    app:
        depends_on:
            - mysql
        build: ./app/
        container_name: app

Все это замечательно собирается но цель в том что приложение могло подсоединится к бд, а оно не может.

из приложение коннект создается таким образом

 private DataSource() {
        try {
            cpds = new ComboPooledDataSource();
            cpds.setDriverClass("com.mysql.cj.jdbc.Driver");
            cpds.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/Base");
            cpds.setUser("user");
            cpds.setPassword("userpass");
            cpds.setInitialPoolSize(5);
            cpds.setMinPoolSize(5);
            cpds.setAcquireIncrement(5);
            cpds.setMaxPoolSize(20);
            cpds.setMaxStatements(180);
            cpds.setTestConnectionOnCheckout(true);
            cpds.setIdleConnectionTestPeriod(300);
            cpds.setMaxIdleTimeExcessConnections(240);
        }catch (PropertyVetoException e) {
            throw new IllegalArgumentException("Ошибка конфигурирования связи с БД");
        }
    }

Если захардкодить в jar адрес соседнего контейнера то коннект есть, но я подозреваю что это не правильно. Как это делается во всеми любимых примерах когда дружат mysql и wordpress например? Как приложению правильно указать на какой адрес ему соединяться ?

Answer 1

как всегда поторопился и нашел ответ в соседней теме)

version: '3'
services:
    mysql:
        build: ./mysql/
        container_name: mysqlbase
        ports:
            - "3600:3600"
         environment:
             MYSQL_ROOT_PASSWORD: "root_pass"
             MYSQL_USER: "user"
             MYSQL_PASSWORD: "userpass"
             MYSQL_DATABASE: "Base"
        networks:
            - somenetwork
    app:
        depends_on:
            - mysql
        build: ./app/
        container_name: app
        networks:
          - somenetwork
networks:
     somenetwork:
        driver: bridge

а в самом приложении просто вот так

  cpds.setJdbcUrl("jdbc:mysql://mysqlbase:3306/Base");

Это магия и она работает)

READ ALSO
Парсинг с сайта, поясните

Парсинг с сайта, поясните

Меня интересует такой вопросКогда я делаю парсинг страницы ВК, бот выдает мне информацию на специфическом языке, на котором у меня локализован...

210
Проверка цепочки x509 сертификатов

Проверка цепочки x509 сертификатов

Вопрос такой: У меня есть сертификат корневого УЦ (самоподписанный), промежуточный и ключ ЭЦП (PKCS12)Я из PKCS12 файла достаю сертификат, и теперь...

240
Что делает это участок кода? [закрыт]

Что делает это участок кода? [закрыт]

Считает и записывает в поле класса count количество добавленных элементов в HashSet, а больше и ничегоВсе остальное делает отцовский класс HashSet...

165
Анимация переворота карточки свайпом

Анимация переворота карточки свайпом

Интересует способ того, как сделать возможность поворачивать карточку свайпом, те

153