在docker组成一个图像后运行命令

时间:2018-12-04 19:22:59

标签: docker docker-compose

我有一个看起来像这样的docker-compose.yml:

version: '3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql2
     restart: always
     ports:
         - "3306:3306"
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wptest
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     volumes:
         - ./site/:/var/www/html/
         - ~/playground/certs/:/etc/ssl/certs/
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "80:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_NAME: wptest
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress

volumes:
    db_data:

它可以正常工作,我的wordpress安装也很好-混合中有一个自签名证书。因此,当我尝试更新我的wordpress安装或其他内容时,它会失败(与插件相同)。

如果我进入容器的bash外壳并运行update-ca-certificates,它将找到我的密钥并安装它们,然后我就可以毫无问题地运行更新。

我的问题是-我可以自动执行此操作,以便它在容器启动后自动插入我的证书并运行命令,同时仍然允许我使用docker-compose up吗?

1 个答案:

答案 0 :(得分:0)

您可以创建一个简单的Dockerfile,该文件从wordpress映像中提取,并添加RUN命令以及您想要执行的操作。

FROM wordpress:latest

RUN your-command-here

然后更改您的docker-compose以使用此新图像代替官方wordpress图像,可能类似于: (注意构建参数)

   wordpress:
     volumes:
         - ./site/:/var/www/html/
         - ~/playground/certs/:/etc/ssl/certs/
     depends_on:
       - db
     build:
      context: .
      dockerfile: ./Dockerfile
     ports:
       - "80:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_NAME: wptest
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress