当我执行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
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
答案 0 :(得分:1)
使用泊坞窗包括两个步骤:
关键是你mysql client
可以在第二步连接到服务器 。
Dockerfile
“执行”。在这个时候你没有任何容器,因此你无法连接它们。
你需要移动命令
RUN cd lafayette && mysql –h 172.25.0.102 –u root –ppass sys < forensic.sql
从Dockerfile
到entrypoint.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和端口的连接