Docker-compose构建错过了容器中的一些包内容

时间:2018-02-08 16:06:36

标签: docker docker-compose dockerfile

我正在开发利用监控应用程序(Centreon)的构建容器。 当我手动构建我的容器(使用docker run)并且当我构建我的docker文件时,我有不同的结果。缺少应用程序使用的某些脚本。

这是我的dockerfile:

FROM centos:centos7
LABEL Author = "AurelienH."
LABEL Description = "DOCKERFILE : Creates a Docker Container for a Centreon poller"

#Update and install requirements
RUN yum update -y
RUN yum install -y wget nano httpd git

#Install Centreon repo
RUN yum install -y --nogpgcheck  http://yum.centreon.com/standard/3.4/el7/stable/noarch/RPMS/centreon-release-3.4-4.el7.centos.noarch.rpm

#Install Centreon
RUN yum install -y centreon-base-config-centreon-engine centreon centreon-pp-manager centreon-clapi
RUN yum install -y centreon-widget*
RUN yum clean all

#PHP Time Zone
RUN echo -n "date.timezone = Europe/Paris" > /etc/php.d/php-timezone.ini

#Supervisor
RUN yum install -y python-setuptools
RUN easy_install supervisor
COPY /cfg/supervisord.conf /etc/

RUN yum clean all

EXPOSE 22 80 5667 5669

CMD ["/usr/bin/supervisord", "--configuration=/etc/supervisord.conf"]

我看到的区别在于 / usr / lib / nagios / plugins文件夹。我在这里想念一些剧本。当我执行完全相同的命令,但在我正在运行的容器中,我可以找到我的文件。 也许它与为使用docker-compose执行命令的用户写入权限有关?

编辑: docker-compose文件:

version: "3"

services:
  centreon:
    build: ./centreon
    depends_on:
    - mariadb
    container_name: sinelis-central
    volumes:
      - ./central-broker-config:/etc/centreon-broker
      - ./central-centreon-plugins:/usr/lib/centreon/plugins
      - ./central-engine-config:/etc/centreon-engine
      - ./central-logs-broker:/var/log/centreon-broker
      - ./central-logs-engine:/var/log/centreon-engine
      - ./central-nagios-plugins:/usr/lib/nagios/plugins
      - ./central-ssh-key:/home/centreon/.ssh/

    ports:
      - "80:80"
      - "5667:5667"
      - "5669:5669"
      - "22:22"
    deploy:
      restart_policy:
        window: 300s
    links:
    - mariadb

  mariadb:
    image: mariadb
    container_name: sinelis-mariadb
    environment:
      MYSQL_ROOT_PASSWORD: passwd2017
    deploy:
      restart_policy:
        window: 300s

要运行容器我使用 docker run -it centos:centos7 命令

1 个答案:

答案 0 :(得分:1)

您在该位置放置图像并不重要,您将始终看到卷装的内容:

  - ./central-nagios-plugins:/usr/lib/nagios/plugins

Docker不会将主机卷初始化为图像内容,一旦卷中有数据,docker就会使用任何卷类型进行初始化。

请记住,在没有应用compose文件中的任何其他配置的情况下,构建发生在图像上,没有安装任何卷供您更新。然后,当您运行容器时,使用您选择的卷覆盖图像的目录。构建时间和运行时间分为两个阶段。

编辑:要将指定的卷指向主机目录,可以定义绑定装入卷。如果目录尚不存在,则不会创建该目录(安装卷的尝试将失败,容器将无法启动)。但如果目录为空,则会将其初始化为图像内容:

version: "3"

volumes:
  central-nagios-plugins:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /usr/lib/nagios/plugins

services:
  centreon:
    ....
    volumes:
      ...
      - central-nagios-plugins:/usr/lib/nagios/plugins
      ...

当您希望使用图像内容重新初始化此卷时,将由您清空此卷的内容,并且合并此目录的多个版本也是您需要创建的过程自己。