访问数据库时dockerfile中的网络问题

network issues in dockerfile while accessing database

我有一个小型 python 后端和一个 mariaDB。对 Docker 服务感到沮丧。

docker-compse 看起来像这样:

version: '3.5'

networks:
  web:
    name: web
    external: true
  wsm:
    name: wsm
    internal: true
volumes:
  wsm-partsfinder-db:
    name: wsm-partsfinder-db

services:
  wsmbackend:
    build:
      context: .
      dockerfile: ./docker/Dockerfile
    container_name: wsm-file-parts-backend
    restart: always
    depends_on:
      - wsmdb
    ports:
      - "8888:8888"
    networks:
      - web
      - wsm
  wsmdb:
    container_name: wsmdb
    image: mariadb:10.7.1
    command: --default-authentication-plugin=mariadb_native_password
    restart: unless-stopped
    environment:
      MARIADB_ROOT_PASSWORD: password
      MARIADB_USER: wsm
      MARIADB_PASSWORD: password
      MARIADB_DATABASE: wsm_parts
    volumes:
      - wsm-partsfinder-db:/var/lib/mysql
    networks:
      - wsm
    ports:
      - "4485:3306"

为 wsmbackend 服务调用的 Docker 文件如下所示:

FROM python

RUN apt-get update -y
RUN apt-get upgrade -y

COPY . /wsm
WORKDIR /wsm

RUN pip install -r requirements.txt

RUN yoyo apply --database mysql://wsm:password@wsmdb:4485/wsm_parts ./migrations

EXPOSE 8888
CMD ["/bin/sh", "-c", "python main.py"]

我在 yoyo apply 中遇到错误...

这个案例的问题是什么? 提前致谢

您无法 运行 在构建阶段查询数据库,因为您的数据库容器尚未在当前点启动。

RUN语句只在构建阶段执行。您需要将它移动到 CMD(入口点),以便在启动容器和数据库时执行它。