2017-04-04 54 views
1

當我執行xdcomp_my_sql_client命令時,它會ping ip,但是當它試圖到達mysql服務器時,它會失敗。如果我在容器運行時執行完全相同的命令,它就可以工作。似乎mysql命令執行的時候沒有運行。但是我使用了「depends_on」命令,所以我做錯了什麼?在docker-compose中執行mysql命令時出錯

謝謝。

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 

回答

1

與碼頭工人工作包括2個步驟:基於圖像和運行該容器

  • 構建圖像
  • 創建容器關鍵是你可以在第二步中連接到服務器只有

    Dockerfile「執行」,而你建立圖像。在這個時候你沒有任何容器,因此你不能連接它們。 你需要移動命令

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

    Dockerfile

    entrypoint.sh

    你能告訴我你的Dockerfile?我將嘗試修復問題

+0

謝謝你,我現在明白爲什麼我錯在這樣做的連接。但我仍然有問題想要做我想做的事情。一旦docker-compose爲這兩個容器運行,我想從客戶端容器上傳一個數據庫到服務器容器。我在docker-compose:命令中嘗試了以下命令:sh -c'ping -c 5 172.28.0.102 && mysql -h 172.28.0.102 -u root -ppass sys

+0

在我執行命令時,似乎mysql服務器沒有運行。 –

0

問題在於:在執行客戶端命令時,mysql服務器未運行。即使密鑰「depends_on」存在(請參閱:https://docs.docker.com/compose/startup-order/)因此,解決方案是等待mysql服務器。這是通過以下命令完成的:

command:sh -c'until nc -z -v -w20 172.28.0.102 3306;做睡1; 回聲「等待mysqlserver上來......」;完成& &平-c 5 172.28.0.102 & & 的MySQL -h 172.28.0.102 -u根-pdiego SYS < /lafayette/forensic.sql & & 尾-f的/ etc /主機名稱」

的等待由以下行作出:

直到nc -z -v -w20 172.28.0.102 3306;做睡1; 回聲「等待mysqlserver上來......」;做

NC = netcat的命令,它檢查到指定的IP和端口