在docker-compose中执行mysql命令时出错

时间:2017-04-04 21:33:29

标签: mysql docker docker-compose dockerfile

当我执行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

2 个答案:

答案 0 :(得分:1)

使用泊坞窗包括两个步骤:

  • 建立图像
  • 基于图像创建容器并运行此容器

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

在构建图像时,

Dockerfile“执行”。在这个时候你没有任何容器,因此你无法连接它们。 你需要移动命令

RUN cd lafayette && mysql –h 172.25.0.102 –u root –ppass sys < forensic.sql

Dockerfileentrypoint.sh

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

答案 1 :(得分:0)

问题如下:mysql服务器在执行客户端命令时没有运行。即使钥匙&#34;依赖&#34;存在(参见:https://docs.docker.com/compose/startup-order/)因此,解决方案是等待mysql服务器。这是通过以下命令完成的:

  

命令:sh -c&#39;直到nc -z -v -w20 172.28.0.102 3306;做睡觉1;   echo&#34;等待mysqlserver出现......&#34 ;;完成&amp;&amp; ping -c 5 172.28.0.102&amp;&amp;   mysql -h 172.28.0.102 -u root -pdiego sys&lt; /lafayette/forensic.sql&amp;&amp;   tail -f / etc / hostname&#39;

等待是由以下行:

  

直到nc -z -v -w20 172.28.0.102 3306;做睡觉1;   echo&#34;等待mysqlserver出现......&#34 ;;完成

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