簡體   English   中英

從一個 docker 容器連接到另一個容器中的 mysql 數據庫

[英]Connect from a docker container to a mysql database in another container

我想使用以下文件夾配置從 app 容器訪問 db 容器中的 mariadb,但它不會出現錯誤。

目錄結構

.
├── app
│   └── Dockerfile
├── db
│   └── Dockerfile
└── docker-compose.yml

代碼

應用程序/Dockerfile

FROM debian:buster

RUN set -x \
    && apt-get update \
    && apt-get install --no-install-recommends --no-install-suggests -y \
        mariadb-client \
        vim

CMD [ "tail", "-f" ]

數據庫/Dockerfile

FROM debian:buster

RUN set -x \
    && apt-get update \
    && apt-get install --no-install-recommends --no-install-suggests -y \
        mariadb-server \
        mariadb-client \
        vim

CMD service mysql start \
    && tail -f /dev/null

docker-compose.yml

version: "3.9"

services:
  app:
    build: ./app
    networks:
      - frontend

  db:
    build: ./db
    volumes:
      - db_data:/var/lib/mysql
    expose:
      - 3306
    networks:
      - frontend

networks:
  frontend:
    driver: bridge

volumes:
  db_data: {}

執行命令

我進入應用程序容器並執行以下命令,但出現錯誤。

root@0e0ad0889639:/# mysql -h db -uroot
ERROR 2002 (HY000): Can't connect to MySQL server on 'db' (115)

root@0e0ad0889639:/# ping db
PING db (192.168.128.3) 56(84) bytes of data.
64 bytes from test_db_1.test_frontend (192.168.128.3): icmp_seq=1 ttl=64 time=0.104 ms
64 bytes from test_db_1.test_frontend (192.168.128.3): icmp_seq=2 ttl=64 time=0.142 ms

我怎樣才能連接?

環境

❯ docker -v        
Docker version 20.10.12, build e91ed57

❯ docker-compose -v               
docker-compose version 1.29.2, build 5becea4c

❯ sw_vers
ProductName:    macOS
ProductVersion: 12.3
BuildVersion:   21E230

db容器中的以下方法解決了這個問題。

  1. 數據庫設置
USE mysql;
GRANT ALL ON *.* TO 'root'@'%' identified by 'pass' WITH GRANT OPTION ;
GRANT ALL ON *.* TO 'root'@'localhost' identified by 'pass' WITH GRANT OPTION ;
FLUSH PRIVILEGES ;
  1. mysql 配置文件設置
echo "bind-address = app" >> etc/mysql/mariadb.conf.d/50-server.cnf

正如評論所指出的,默認的 Debian MariaDB 將bind-address配置為本地主機。 這就是為什么Docker 庫 mariadb 鏡像刪除了那些配置項。

如果你想要的只是在你的容器中安裝一個vim ,那么可以使用以下命令來獲得維護和測試的容器鏡像的所有好處:

數據庫/Dockerfile

FROM mariadb:10.6
ENV MARIADB_ROOT_PASSWORD=pass
RUN set -x \
    && apt-get update \
    && apt-get install --no-install-recommends --no-install-suggests -y \
        vim; \
    rm -rf /var/lib/apt/lists/*

如果您有興趣,請注意存在小型編輯器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM