1

次の Dockerfile を使用して Apache 2 Docker コンテナーを拡張しようとしています。

FROM joomla:3-apache-php7    
RUN apt-get update
RUN a2enmod ssl

RUN printf "\nIncludeOptional /data/apache/conf-enabled/*.conf\n" >> /etc/apache2/apache2.conf
RUN printf "include_path = '.:/data/php/conf.d'" > /usr/local/etc/php/conf.d/additional.ini

RUN bash -c 'mkdir -pv /data/{apache/conf-enabled,php/conf.d}'
RUN ln -s /etc/apache2/sites-enabled/ /data/apache/sites-enabled

VOLUME ["/var/www/html/", "/data/apache/", "/data/php/"]

EXPOSE 80 443

ENTRYPOINT ["/entrypoint.sh"]
CMD ["apache2-foreground"]

コンテナを起動しようとすると、次のように表示されます。

root@n06 / # docker-compose up -d
root@n06 / # docker-compose logs container
apache2: Syntax error on line 223 of /etc/apache2/apache2.conf: Could not open config directory /data/apache/conf-enabled: No such file or directory

コメントアウトしRUN printf "\nIncludeOptional /data/apache/conf-enabled/*.conf\n" >> /etc/apache2/apache2.confて実行中のコンテナーにログインすると、次のようになります。

root@1c72507b2024:/# ls -la /data/**
/data/apache:
total 8
drwxr-xr-x 2 root root 4096 Sep  3 11:39 .
drwxr-xr-x 5 root root 4096 Sep  3 11:50 ..

/data/php:
total 8
drwxr-xr-x 2 root root 4096 Sep  3 11:39 .
drwxr-xr-x 5 root root 4096 Sep  3 11:50 ..

作成されたディレクトリはランダムに消え、/data/apache/conf が有効なディレクトリが存在する場合があります。

編集

docker-compose.yml:

version: '2'

networks:
  main:
    driver: bridge
    ipam:
       driver: default
       config:
         - subnet: 172.18.0.0/16
           gateway: 172.18.0.1

services:
  test:
    build: docker/test
    container_name: test
    networks:
      - main
    volumes:
      - /mnt/docker/test/joomla:/var/www/html
      - /mnt/docker/test/apache:/data/apache/
      - /mnt/docker/test/php:/data/php/
      - /etc/letsencrypt:/etc/letsencrypt
      - /var/lib/letsencrypt:/var/lib/letsencrypt
      - /etc/localtime:/etc/localtime
    links:
      - mariadb:mariadb
    environment:
      - JOOMLA_DB_USER=test
      - JOOMLA_DB_PASSWORD=test
      - JOOMLA_DB_HOST=mariadb
      - JOOMLA_DB_NAME=test
4

1 に答える 1

1

これに確実に答えるには十分なデータがありませんが、最大のヒントは、これらをボリュームとして定義しているという事実から得られます。

VOLUME ["/var/www/html/", "/data/apache/", "/data/php/"]

あなたの作成コマンドは、以前の実行からこれらのフォルダーを取得していると思われます。また、外部の swarm で実行している場合、これらのボリュームは、swarm がコンテナーを実行しているノードによって異なる場合があります。確実に知るには、あなたdocker-compose.ymlの を見て、これらのコマンドを実行している環境と、実行しているすべてのコマンドについて詳しく知る必要がありdocker-composeます (stopは とは大きく異なりdownます)。

Dockerfile の一部としてボリュームを作成することはお勧めしないことに注意してください。これは、これに基づいて構築されたイメージがそれらのフォルダーを変更できないようにするためです (通常、それらの変更は失われます)。コンポーズでボリュームの場所を定義しないでください。これらの匿名コンテナー ボリュームは、remove () で追加のフラグを使用するか、一意の ID ごとにdocker rm -v手動でクリーンアップする必要があります。docker volume rm


編集された質問への回答: その構成ボリューム マウントでは、/mnt/docker/test/apache の内容によって異なります。コンテナー内のディレクトリの内容は、ホストからマウントされたものによって完全に上書きされます。コンテナーが異なるホスト (swarm など) で実行されている場合、各ホストはこの場所に異なるコンテンツを持っている可能性があります。ディレクトリが見つからない場合、コンテナ内のディレクトリが空になります。

于 2016-09-03T13:27:46.670 に答える