instalar - install docker
¿Cómo manejar las direcciones IP al vincular contenedores docker entre sí usando docker-compose? (1)
Estoy usando docker-componte para construir una pila de desarrollo completa.
La aplicación necesita un servidor mysql para funcionar.
El servidor mysql es una configuración de contenedor externo por 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
La aplicación tiene su propio docker-compose.yml y hace referencia al contenedor 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''s IP address?
No puedo pasarlos en el docker-componer, ya que es dinámico.
Sé que la aplicación conoce la dirección IP de mysql, ya que tengo ciertas variables establecidas:
application-container$ env|grep ADDR
MYSQL_PORT_3306_TCP_ADDR=172.17.0.241
Sin embargo, este no es mi DB_HOST
requerido.
¿Puedo asignar la variable de alguna manera a DB_HOST
o configurarla de manera diferente?
No es necesario configurar la IP, pero puede hacer referencia al nombre de host virtual del contenedor, y este es el mismo valor que el nombre de su contenedor vinculado.
Esto significa que puede establecer el DB_HOST desde el docker-compose.yml
, ya sea con links
(recomendado) o external_links
:
your_application:
build: .
ports:
- "9180:80"
- "9543:443"
external_links:
- mysql_mysql_1:docker-mysql
environment:
DB_HOST: docker-mysql
Como cuando te conectas a tu contenedor acoplable, puedes conectarte a tu contenedor mysql:
application-container $ mysql -h docker-mysql -uroot -ppassword -p 3360
Funciona igual cuando vincula contenedores del mismo docker-composer.yml también.
Esto también está documented :
Enlace a contenedores en otro servicio. Especifique el nombre del servicio y el alias del enlace (SERVICE: ALIAS), o solo el nombre del servicio (que también se usará para el alias).
links: - db - db:database - redis
Se creará una entrada con el nombre del alias en / etc / hosts dentro de contenedores para este servicio, por ejemplo:
172.17.2.186 db 172.17.2.186 database 172.17.2.187 redis
También se crearán variables de entorno ; consulte la referencia de la variable de entorno para más detalles.