我有下面的Dockerfile。我试图用--build参数重建图像和docker compose。我看到它经历了包括重新创建证书在内的步骤,但它不会将其写入目录。该目录归root所有,root拥有对其的完全访问权限。我也在运行docker compose。这是/var/lib/docker/volumes上的挂载目录。存在/etc/apache2/certificate目录。我错过了什么?
--DockerFile
FROM php:7.4.3-apache
RUN apt-get update -y && apt-get install -y apt-utils libhtml-template-pro-perl default-mysql-client libtemplate-perl openssl
RUN docker-php-ext-install mysqli pdo pdo_mysql && docker-php-ext-enable pdo_mysql
RUN a2enmod ssl
RUN a2enmod rewrite
WORKDIR /etc/apache2/certificate
RUN touch testing_before.txt
RUN openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out apache-certificate.crt -keyout apache.key -subj "/C=US/ST=GA/L=Atlanta/O=Companyabc/CN=`hostname -f`"
RUN touch testing_after.txt
RUN service apache2 restart
---Docker-compose
---
version: "3.7"
services:
web:
build: ./apache
container_name: apache
restart: unless-stopped
volumes:
- web-data:/var/www/html
- web-conf:/etc/apache2
ports:
- "80:80"
- "443:443"
volumes:
web-data:
web-conf:
运行openssl req-new-newkey rsa: 4096-x509-sha256天365个节点apache-certificate.crt-keyoutapache.key-subj"/C=US/ST=GA/L=亚特兰大/O=Companyabc/CN=host name-f
"
在大多数情况下,在构建阶段设置主机名是没有意义的,通过在RUN
命令中设置主机名,就像使用apt get
安装软件包一样,它发生在容器的同一层中。Docker守护进程在运行时动态设置主机名时,Docker稍后将覆盖主机名。
下面可能是您可以在Dockerfile
# base image
FROM php:7.4.3-apache
# your other packages & extensions goes here
# .....
# ports you expose here
EXPOSE 80
EXPOSE 443
# override your entrypoint with new script
ADD docker-entrypoint.sh /
# make it executable
RUN chmod a+x /docker-entrypoint.sh
# your new entry point override
ENTRYPOINT ["/docker-entrypoint.sh"]
# we're using original apache2-foreground script
CMD ["apache2-foreground"]
并创建docker入口点。sh
#!/bin/sh
set -e
# if you have some more task put here
# example configuration customisation etc..
# certificate directory
mkdir -p /etc/apache2/certificate
if [ ! -f "/etc/apache2/certificate/apache-certificate.crt" ] || [ ! -f "/etc/apache2/certificate/apache.key" ]; then
echo ">> generating self signed cert"
openssl req -x509 -newkey rsa:4096 \
-subj "/C=US/ST=GA/L=Atlanta/O=Companyabc/CN=`hostname -f`" \
-keyout "/etc/apache2/certificate/apache.key" \
-out "/etc/apache2/certificate/apache-certificate.crt" \
-days 365 -nodes -sha256
fi
# first arg is `-f` or `--some-option`
if [ "${1#-}" != "$1" ]; then
set -- apache2-foreground "$@"
fi
exec "$@"
您可以在这里参考原始入口点
您可以在Web服务容器中设置主机名
version: "3.7"
services:
web:
build: ./apache
container_name: apache
hostname: web-server.mydomain.com
restart: unless-stopped
volumes:
- web-data:/var/www/html
- web-conf:/etc/apache2
ports:
- "80:80"
- "443:443"
volumes:
web-data:
web-conf:
测试结果:
root@sys:/home/akshay/Documents/test# tree
.
├── apache
│ ├── docker-entrypoint.sh
│ └── Dockerfile
└── docker-compose.yml
1 directory, 3 files
root@sys:/home/akshay/Documents/test# docker-compose up -d --build
Building web
Step 1/7 : FROM php:7.4.3-apache
---> d753d5b380a1
Step 2/7 : EXPOSE 80
---> Using cache
---> 66c155b818cc
Step 3/7 : EXPOSE 443
---> Using cache
---> 141789b7ce40
Step 4/7 : ADD docker-entrypoint.sh /
---> Using cache
---> 0fd8d03fb8ec
Step 5/7 : RUN chmod a+x /docker-entrypoint.sh
---> Using cache
---> 9a081cf61816
Step 6/7 : ENTRYPOINT ["/docker-entrypoint.sh"]
---> Using cache
---> 22b1851f7882
Step 7/7 : CMD ["apache2-foreground"]
---> Using cache
---> 46c5cf7c6630
Successfully built 46c5cf7c6630
Successfully tagged test_web:latest
apache is up-to-date
root@sys:/home/akshay/Documents/test# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20a2af0e0570 test_web "/docker-entrypoint.…" 50 seconds ago Up 48 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp apache
root@web-server:/var/www/html# ls /etc/apache2/certificate/ -1
apache-certificate.crt
apache.key
root@web-server:/var/www/html# openssl x509 -in /etc/apache2/certificate/apache-certificate.crt -text | head -15
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
5f:b9:28:da:06:53:12:64:c3:e5:1c:90:5d:9e:18:f5:f2:1f:2c:eb
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = US, ST = GA, L = Atlanta, O = Companyabc, CN = web-server.mydomain.com
Validity
Not Before: May 26 16:45:25 2021 GMT
Not After : May 26 16:45:25 2022 GMT
Subject: C = US, ST = GA, L = Atlanta, O = Companyabc, CN = web-server.mydomain.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (4096 bit)
Modulus:
确保证书的有效性
root@sys:/home/akshay/Documents/test# docker-compose up -d --force-recreate
Recreating apache ... done
root@sys:/home/akshay/Documents/test# docker exec -it apache bash
root@web-server:/var/www/html# openssl x509 -in /etc/apache2/certificate/apache-certificate.crt -text | head -15
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
43:1a:6d:c1:af:bc:05:54:58:04:f7:d2:42:d7:92:5f:ef:dc:a6:20
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = US, ST = GA, L = Atlanta, O = Companyabc, CN = web-server.mydomain.com
Validity
Not Before: May 26 16:53:34 2021 GMT
Not After : May 26 16:53:34 2022 GMT
Subject: C = US, ST = GA, L = Atlanta, O = Companyabc, CN = web-server.mydomain.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (4096 bit)
Modulus:
我正在尝试将json文件转换为csv文件。json文件来自tweepy。 但是当我打印它的时候,它起作用了。当我只写时,它就起作用了。 我是一个新手在Python和twepy。但是我的直觉告诉我,这个问题与json文件本身有关。 这是json文件本身: 另一个错误: Traceback(最近一次调用):文件"C:\用户\用户\桌面\fase 1-20170930T062552Z-001\trans
我无法在缓存目录中写入文件 使用context.filesdir(但不使用context.cachedir)可以很好地工作。我正在使用libaums库读取USB文件。
我有一个包含String[]和Time[]数组列的表。从桌子上看书很好。但当我想创造一张唱片的时候... null
问题内容: 直到几天前,它仍能正常工作,而当我今天再次尝试构建它时,终端中出现以下错误。我尝试使用多个docker基本映像,但仍给出相同的错误。谁能帮我这个?我不认为我错过了任何东西。如果我错过了,应该早点给我错误,但是现在为什么呢? 而我的docker版本是 这是我的 问题答案: 我刚刚更改了VM Player网络设置。从更改为。现在工作了
Docker 为我们提供了 Dockerfile 来解决自动化的问题。我们将介绍什么是 Dockerfile,它能够做到的事情以及 Dockerfile 的一些基本语法。 Dockerfile 的语法规则 Dockerfile 包含创建镜像所需要的全部指令。基于在 Dockerfile 中的指令,我们可以使用 Docker build 命令来创建镜像。通过减少镜像和容器的创建过程来简化部署。 Do
我正在Servlet 3.0和Tomcat中做一个简单的演示项目 我接受邮递员的JSON请求并提供JSON响应。 现在我也想在我的项目中做日志记录。 所以我使用log4j2 罐子使用:- log4j-1.2.12.jar, jackson-databind-2.6.3.jar, jackson-core-2.6.3.jar Servlet代码:- 我的项目目录:- 我的log4j。xml 当我在e