How to configure mariadb docker-compose file to use other port than 3306?
Solution 1
You need to replace the default my.cnf
to specify a custom port for 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 your docker-compose.yml like this:
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 here
Solution 2
The container image is statically bound to :3306
. If you wish to change this, you'll need to build a new image and configure the database to run elsewhere.
However, Docker permits you to map (publish) this as a different port :33020
.
The correct way to do this is to:
- docker-compose
MYSQL_TCP_PORT=3306
- docker-compose
ports: - "33020:3306"
- Dockerfile
EXPOSE 3306
(unchanged)
Containers (internally) will correctly reference :3306
but externally (from the host) the database will be exposed on :33020
.
NB Within docker-compose (network), other containers must continue to reference the database on port :3306
.
Software
Updated on June 04, 2022Comments
-
Software almost 2 years
I cannot get mariadb to use another port other than 3306 when running it in a docker container using a docker-compose file.
I have already read the mariadb/docker documentation, searched online and conducted my own experiments.
- docker-compose file:
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"
- Dockerfile:
FROM: mariadb: 10.3.14 COPY mydbscript.sql /docker-entrypoint-initdb.d/ EXPOSE 33020 CMD ["mysqld"]
It never uses port 33020. It still uses port 3306. How can I pass the port dynamically via the docker-compose file at run-time?