No puedo hacer que mariadb use otro puerto que no sea 3306 cuando lo ejecuto en un contenedor docker usando un archivo docker-compose.
Ya leí la documentación de mariadb/docker, busqué en línea y realicé mis propios experimentos.
version: '3.1' services: db: image: mariadb restart: always environment: - MYSQL_ROOT_PASSWORD=mypassword - MYSQL_TCP_PORT=33030 - MYSQL_UNIX_PORT=33020 ports: - "33020:33020" FROM: mariadb: 10.3.14 COPY mydbscript.sql /docker-entrypoint-initdb.d/ EXPOSE 33020 CMD ["mysqld"]Nunca usa el puerto 33020. Todavía usa el puerto 3306. ¿Cómo puedo pasar el puerto dinámicamente a través del archivo docker-compose en tiempo de ejecución?
Debe reemplazar el my.cnf predeterminado para especificar un puerto personalizado para MariaDB/MySQL:
cd /where/your/docker-compose.yml/located docker run -it mariadb cat /etc/mysql/my.cnf > my.cnf # use any text editor your like to open my.cnf, search for "port = 3306" # and replace it to the port you like to have.Configure su docker-compose.yml así:
version: '3.1' services: db: image: mariadb restart: always volumes: - type: bind source: ./my.cnf target: /etc/mysql/my.cnf environment: - MYSQL_ROOT_PASSWORD=mypassword # add your other configurations hereLa imagen del contenedor está vinculada estáticamente a :3306 . Si desea cambiar esto, deberá crear una nueva imagen y configurar la base de datos para que se ejecute en otro lugar.
Sin embargo, Docker le permite mapear (publicar) esto como un puerto diferente :33020 .
La forma correcta de hacer esto es:
MYSQL_TCP_PORT=3306ports: - "33020:3306"EXPOSE 3306 (sin cambios) Los contenedores (internamente) harán referencia correctamente a :3306 pero externamente (desde el host) la base de datos estará expuesta en :33020 .
NB Dentro de docker-compose (red), otros contenedores deben continuar haciendo referencia a la base de datos en el puerto :3306 .