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

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

使用docker包括两个步骤:

  • build立一个形象
  • 根据图像创build容器并运行该容器

关键是你的mysql client 只能在第二步连接到服务器。

Dockerfile “执行”,而你build立的形象。 在这个时候,你没有任何容器,所以你不能连接到它们。 你需要移动命令

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

Dockerfile到entrypoint.sh

你能告诉我你的Dockerfile吗? 我会尽力解决这个问题

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

命令:sh -c'直到nc -z -v -w20 172.28.0.102 3306; 做睡1; 回声“等待mysqlserver上来…”; done && ping -c 5 172.28.0.102 && mysql -h 172.28.0.102 -u root -pdiego sys </lafayette/forensic.sql && tail -f / etc / hostname'

等待是由以下行:

直到nc -z -v -w20 172.28.0.102 3306; 做睡1; 回声“等待mysqlserver上来…”; DONE

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