Reputation: 69755
I have very limited experience with Docker, and having an issue, so I have the following yml file:
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"
I need to run the following commands for the second container 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
The point is that I want to run these commands just once as when you provide a docker file for the first container python
. How can I achieve this?
Upvotes: 0
Views: 395
Reputation: 14210
My first advice is to build your own image with your own Dockerfile
. In this case you will do it once and all the containers will have the same config.
Dockerfile
should look like this:
FROM mysql:latest
COPY create_config.sh /tmp/create_config.sh
CMD ["/tmp/create_config.sh"]
Create create_config.sh
in the same dir as your Dockerfile
and put your required commands there:
#!/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
Now you can use it in your docker-compose.yml
:
db:
context: .
dockerfile: Dockerfile
Keep in mind, that context
is the path to the dir where your new Dockerfile is.
Upvotes: 1