【问题标题】:Error while executing mysql commands inside docker-compose在 docker-compose 中执行 mysql 命令时出错
【发布时间】:2017-04-04 21:33:28
【问题描述】:

当我执行 xdcomp_my_sql_client 命令时,它会 ping ip,但是当它尝试访问 mysql 服务器时,它会失败。如果我在容器运行后执行完全相同的命令,它就可以工作。执行命令时似乎mysql服务器没有运行。但是我使用了“depends_on”命令,我做错了什么?

谢谢。

version: '2'

services:
  xdcomp_my_sql_server:
    image: mysql/mysql-server:latest
    environment:
      MYSQL_ROOT_PASSWORD: diego
      MYSQL_USER: otro
      MYSQL_PASSWORD: otro
      MYSQL_ROOT_HOST: 172.28.0.101
    networks:
      SQLNetwork:
        ipv4_address: 172.28.0.102

  xdcomp_my_sql_client:
    build: .
    command: sh -c 'ping -c 5 172.28.0.102 && mysql -h 172.28.0.102 -u root -pdiego sys < /lafayette/forensic.sql && tail -f /etc/hostname'
    ports:
      - 83:80
    networks:
      SQLNetwork:
        ipv4_address: 172.28.0.101
    depends_on:
      - xdcomp_my_sql_server


networks:
  SQLNetwork:
    driver: "bridge"
    ipam:
      config:
        - subnet: 172.28.0.0/24
          gateway: 172.28.0.201

客户端 Dockerfile

FROM ubuntu:16.04
RUN apt-get update
RUN apt-get install -y mysql-client
RUN apt-get install -y git
RUN git clone https://github.com/linkedin/lafayette
RUN apt-get update
RUN apt-get install -y python-dnspython
RUN apt-get install -y python-pip
RUN pip install Flask
RUN pip install python-dateutil
RUN apt-get install -y python-mysqldb
RUN pip install requests
RUN pip install multiprocessing
RUN pip install multiprocess
RUN apt-get install -y vim
RUN apt-get -y install iputils-ping

【问题讨论】:

    标签: mysql docker docker-compose dockerfile


    【解决方案1】:

    使用 docker 包括 2 个步骤:

    • 构建图像
    • 基于镜像创建容器并运行该容器

    关键是您mysql client 可以在第二步连接到服务器。

    Dockerfile 在构建映像时“执行”。此时您没有任何容器,因此您无法连接到它们。 你需要移动命令

    RUN cd lafayette &amp;&amp; mysql –h 172.25.0.102 –u root –ppass sys &lt; forensic.sql

    Dockerfileentrypoint.sh

    你能告诉我你的 Dockerfile 吗?我会尝试解决问题

    【讨论】:

    • 谢谢你我现在明白为什么我这样做是错误的了。但我仍然在尝试做我想做的事情时遇到问题。一旦这两个容器的 docker-compose 运行,我想将数据库从客户端容器上传到服务器容器。我在 docker-compose 中尝试了以下命令: command: sh -c 'ping -c 5 172.28.0.102 && mysql -h 172.28.0.102 -u root -ppass sys
    • 我执行命令时似乎mysql服务器没有运行。
    【解决方案2】:

    问题如下:执行客户端命令时mysql服务器没有运行。即使存在密钥“depends_on”(请参阅​​:https://docs.docker.com/compose/startup-order/),因此解决方案是等待 mysql 服务器。这是通过以下命令完成的:

    命令:sh -c '直到 nc -z -v -w20 172.28.0.102 3306;睡一觉; echo "等待 mysqlserver 启动...";完成 && ping -c 5 172.28.0.102 && mysql -h 172.28.0.102 -u root -pdiego sys

    等待是由以下行进行的:

    直到 nc -z -v -w20 172.28.0.102 3306;睡一觉; echo "等待 mysqlserver 启动...";完成

    nc= netcat 命令,它检查到给定 ip 和端口的连接

    【讨论】:

      猜你喜欢
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-27
      相关资源
      最近更新 更多