2017-05-13 43 views
0

我有一個碼頭工人的經驗非常有限創建容器,並有一個問題後運行一個命令,所以我有以下YML文件:如何使用YML文件

version: '2' 
services: 
    python: 
     restart: always 
     build: .path/to/docker/file 
     ports: 
      - "5000:5000" 
      - "8888:8888" 
     links: 
      - db 
     depends_on: 
      - db 
     volumes: 
      - ./path/to/file/:/app:z 
     entrypoint: 
      - python 
      - -u 
      - /app/run.py 

    db: 
     image: mysql:latest 
     environment: 
      MYSQL_ROOT_PASSWORD: xxyyzz 
      MYSQL_DATABASE: database_name 
      MYSQL_USER: user_name 
      MYSQL_PASSWORD: xxyyzz 
     volumes: 
      - ./Dump.sql:/db/Dump.sql:z 
      - ./Dump_Test.sql:/db/Dump_Test.sql:z 
      - ./big_fc.sql:/db/big_fc.sql:z 
     ports: 
      - "3306:3306" 

我需要運行下面的命令第二容器db

echo '[mysqld]' >> /etc/mysql/conf.d/mysql.cnf 
echo 'sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' >> /etc/mysql/conf.d/mysql.cnf 

的一點是,我想只有一次,當你爲第一容器python泊塢窗文件運行這些命令。我怎樣才能做到這一點?

回答

1

我的第一個建議是用你自己的Dockerfile建立你自己的形象。在這種情況下,你會做一次,所有的容器將具有相同的配置。

Dockerfile應該是這樣的:

FROM mysql:latest 

COPY create_config.sh /tmp/create_config.sh 
CMD ["/tmp/create_config.sh"] 

在同一目錄作爲您Dockerfile創建create_config.sh,把你需要的命令有:

#!/bin/bash 

echo '[mysqld]' >> /etc/mysql/conf.d/mysql.cnf 
echo 'sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' >> /etc/mysql/conf.d/mysql.cnf 

現在你可以在你的docker-compose.yml使用它:

db: 
    context: . 
    dockerfile: Dockerfile 

K請記住,context是您的新Dockerfile所在的目錄的路徑。

+0

我想出了一個類似的解決方案,你的回答是確認我正朝着正確的方向前進。非常感謝。 – lmiguelvargasf