Подтвердить что ты не робот

Как обращаться с IP-адресами при соединении контейнеров-докеров друг с другом с помощью docker-compose?

Я использую docker-compose для создания полного стека разработки.

Приложению нужен сервер mysql для работы.

Сервер mysql - это настройка внешнего контейнера с помощью docker-compose:

mysql:
    image: mysql:5.6
    volumes:
        - /data/mysql:/var/lib/mysql
        - ./docker/mysql.d:/etc/mysql/conf.d
    ports:
        - "3306:3306"
    environment:
        MYSQL_ROOT_PASSWORD: password

Приложение имеет свой собственный docker-compose.yml и ссылается на контейнер mysql:

my-application:
    build: . # the Dockerfile resides in the current folder
    ports:
        - "9180:80"
        - "9543:443"
    external_links:
        - mysql_mysql_1:mysql
environment:
    DOCKER_ENVIRONMENT: dev
    DB_NAME: local_db
    DB_PASS: password
    DB_USER: root
    DB_HOST: # how to set the mysql IP address?

Я не могу передать их в docker-compose, поскольку он является динамическим.

Я знаю, что приложение знает о IP-адресе mysql, поскольку у меня есть определенные переменные:

application-container$ env|grep ADDR 
    MYSQL_PORT_3306_TCP_ADDR=172.17.0.241

Но это не мой обязательный DB_HOST.

Можно ли каким-либо образом сопоставить переменную с DB_HOST или установить ее по-другому?

4b9b3361

Ответ 1

Вам не нужно устанавливать IP-адрес, но вы можете ссылаться на имя виртуального хоста контейнера, и это то же значение, что и ваш связанный контейнер.

Это означает, что вы действительно можете установить DB_HOST из docker-compose.yml, либо с помощью links (рекомендуется), либо external_links:

your_application:
    build: .
    ports:
        - "9180:80"
        - "9543:443"
    external_links:
        - mysql_mysql_1:docker-mysql
    environment:
        DB_HOST: docker-mysql

Как и при подключении к контейнеру докера, вы можете подключиться к контейнеру mysql:

application-container $ mysql -h docker-mysql -uroot -ppassword -p 3360

Он работает так же, когда вы связываете контейнер с тем же самым docker-composer.yml.

Это также документально:

Ссылка на контейнеры в другой службе. Укажите либо службу имя и псевдоним связи (SERVICE: ALIAS) или просто имя службы (который также будет использоваться для псевдонима).

links:
 - db
 - db:database
 - redis

Запись с именем псевдонима будет создана в /etc/hosts внутри контейнеры для этой услуги, например:

172.17.2.186  db
172.17.2.186  database
172.17.2.187  redis

Также будут созданы переменные среды - см. среду ссылку на переменную для деталей.