如何在 docker 容器中连接到远程 MariaDB

问题描述 投票:0回答:1

我有以下 docker-compose 文件

version: '3.8'

services:
  mariadb:
    image: mariadb/server:10.5
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=${MARIADB_PASSWORD}
      - MYSQL_ROOT_HOST=${MARIADB_GATEWAY}
    networks:
      network:
        ipv4_address: ${MARIADB_IP}

  my_service:
    build:
      context: .
      dockerfile: Dockerfile_my_service
      args:
        DB_HOST: ${MARIADB_IP}
        DB_USER: ${MARIADB_USER}
        DB_PASSWORD: ${MARIADB_PASSWORD}
    depends_on:
      - mariadb

volumes:
  my_service_vol:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: './../../my_service'

networks:
  network:
    driver: bridge
    ipam:
      config:
        - subnet: ${MARIADB_SUBNET}
          gateway: ${MARIADB_GATEWAY}

我的 .env 文件:

MARIADB_IP=10.5.0.5
MARIADB_SUBNET=10.5.0.0/16
MARIADB_GATEWAY=10.5.0.1
MARIADB_USER=root
MARIADB_PASSWORD=password

此外,这是 Dockerfile_my_service 文件:

FROM debian:11.6
ENV DEBIAN_FRONTEND=noninteractive

ARG DB_HOST
ARG DB_USER
ARG DB_PASSWORD
ENV DB_HOST=${DB_HOST}
ENV DB_USER=${DB_USER}
ENV DB_PASSWORD=${DB_PASSWORD}

RUN apt-get update && apt-get install -y --no-install-recommends apt-utils
RUN apt-get install -y \
    systemd  \
    libmariadb3 \
    dbconfig-common \
    mariadb-server

ENV enable_db='service mariadb start'
RUN ${enable_db} && mariadb --host=${DB_HOST} --user=${DB_USER} --password=${DB_PASSWORD} -e "CREATE USER 'test'@'' IDENTIFIED BY 'test111';"

当我通过

docker-compose up -d my_service
运行 my_service 时,docker 将在此处停止:

Step 12/12 : RUN ${enable_db} && mariadb --host=${DB_HOST} --user=${DB_USER} --password=${DB_PASSWORD} -e "CREATE USER 'test'@'' IDENTIFIED BY 'test111';"
 ---> Running in f79da7cc8f30
Starting MariaDB database server: mariadbd.

并且不会做任何其他事情,有趣的是,如果我运行这个命令:

mariadb --host=10.5.0.5 --user=root --password=密码

在我的本地机器上,一切正常,我可以连接到我的数据库,但是当我从 my_service 容器内部进行连接时,无论我做什么都无法正常工作。

你们谁能帮我理解我做错了什么?

更新:

我还尝试通过在 my_service 中添加这部分来使我的两个容器都属于同一网络:

  my_service:
    build:
      context: .
      dockerfile: Dockerfile_my_service
      args:
        DB_HOST: ${MARIADB_IP}
        DB_USER: ${MARIADB_USER}
        DB_PASSWORD: ${MARIADB_PASSWORD}
    depends_on:
      - mariadb
    networks:
      network:

此外,我尝试过添加和不添加

ipv4_address: 10.5.0.6
对于 my_service,这些案例都没有用。

docker docker-compose dockerfile mariadb docker-machine
1个回答
0
投票

查看 docker networking。你需要建立一个网络,让两个容器都成为它的一部分。 这是一个example.

© www.soinside.com 2019 - 2024. All rights reserved.