【发布时间】:2020-10-07 21:14:48
【问题描述】:
我正在尝试通过 docker compose 在我的 docker 服务器上启动一个 OwnCloud 容器。我正在使用来自 Docker Hub 的股票 OwnCloud 图像。这是我的 yaml 文件:
version: '3.1'
services:
owncloud:
image: owncloud
restart: always
ports:
- 80:80
- 443:443
volumes:
- '/etc/docker/owncloud/data:/var/www/html'
- '/etc/docker/owncloud/ssl.sh:/etc/apache2/ssl.sh'
networks:
default:
ipv4_address: 192.168.226.28
mysql:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: ********
volumes:
owncloud_data:
driver: local
networks:
default:
external:
name: pub_net
效果很好。容器出现了,我可以通过 http 访问它。现在我当然想通过 https 访问,这样你就可以看到我发送到我的容器中的 bash 脚本。以下是该脚本的内容:
#!/bin/bash
a2enmod ssl
a2ensite default-ssl
openssl req -x509 -nodes -days 99999 -newkey rsa:2048 -subj "/C=US/ST=Ohio/L=Cleveland/O=Data/CN=fake.domain.com" -keyout /etc/ssl/private/ssl-cert-snakeoil.key -out /etc/ssl/certs/ssl-cert-snakeoil.pem
service apache2 restart
现在,如果我手动 bash 进入容器并运行该脚本,效果会很好。我可以通过 https 访问 OwnCloud。这就是令人讨厌的地方。我想自动化运行该脚本的过程,以便在容器更新其重建过程的一部分时。到目前为止,我已经尝试在 yaml 文件中添加一个“命令”字符串,如下所示:
version: '3.1'
services:
owncloud:
image: owncloud
restart: always
ports:
- 80:80
- 443:443
volumes:
- '/etc/docker/owncloud/data:/var/www/html'
- '/etc/docker/owncloud/ssl.sh:/etc/apache2/ssl.sh'
networks:
default:
ipv4_address: 192.168.226.28
command: /etc/apache2/ssl.sh
mysql:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: ********
volumes:
owncloud_data:
driver: local
networks:
default:
external:
name: pub_net
当我运行 docker-compose up 时,它似乎确实在运行脚本,除了它一遍又一遍地运行它,并且 apache 服务不断重新启动。这是日志的 sn-p:
重新启动 Apache httpd 网络服务器:apache2。
考虑 ssl 的依赖 setenvif:
模块 setenvif 已启用
考虑 ssl 的依赖 mime:
模块 mime 已启用
考虑ssl的依赖socache_shmcb:
模块 socache_shmcb 已启用
dule ssl 已启用
站点默认-ssl 已启用
生成 RSA 私钥
................+++++
................+++++
将新的私钥写入“/etc/ssl/private/ssl-cert-snakeoil.key”
AH00558:apache2:无法可靠地确定服务器的完全限定域名,使用 192.168.226.28。全局设置“ServerName”指令以禁止显示此消息
[Wed Oct 07 21:09:05.504798 2020] [ssl:warn] [pid 33] AH01906: 192.168.226.28:443:0 服务器证书是 CA 证书(BasicConstraints: CA == TRUE !?)
[Wed Oct 07 21:09:05.504883 2020] [ssl:warn] [pid 33] AH01909: 192.168.226.28:443:0 服务器证书不包含与服务器名称匹配的 ID
重新启动 Apache httpd 网络服务器:apache2。
考虑 ssl 的依赖 setenvif:
模块 setenvif 已启用
考虑 ssl 的依赖 mime:
模块 mime 已启用
考虑ssl的依赖socache_shmcb:
模块 socache_shmcb 已启用
dule ssl 已启用
站点默认-ssl 已启用
生成 RSA 私钥
.......................+++++
.......................+++++
将新的私钥写入“/etc/ssl/private/ssl-cert-snakeoil.key”
AH00558:apache2:无法可靠地确定服务器的完全限定域名,使用 192.168.226.28。全局设置“ServerName”指令以禁止显示此消息
[Wed Oct 07 21:09:15.145928 2020] [ssl:warn] [pid 33] AH01906: 192.168.226.28:443:0 服务器证书是 CA 证书(BasicConstraints: CA == TRUE !?)
[Wed Oct 07 21:09:15.146014 2020] [ssl:warn] [pid 33] AH01909: 192.168.226.28:443:0 服务器证书不包含与服务器名称匹配的 ID
重新启动 Apache httpd 网络服务器:apache2。
考虑 ssl 的依赖 setenvif:
模块 setenvif 已启用
考虑 ssl 的依赖 mime:
模块 mime 已启用
考虑ssl的依赖socache_shmcb:
模块 socache_shmcb 已启用
dule ssl 已启用
站点默认-ssl 已启用
生成 RSA 私钥
.......................+++++
..................................+++++
将新的私钥写入“/etc/ssl/private/ssl-cert-snakeoil.key”
AH00558:apache2:无法可靠地确定服务器的完全限定域名,使用 192.168.226.28。全局设置“ServerName”指令以禁止显示此消息
[Wed Oct 07 21:09:29.712422 2020] [ssl:warn] [pid 33] AH01906: 192.168.226.28:443:0 服务器证书是 CA 证书(BasicConstraints: CA == TRUE !?)
[Wed Oct 07 21:09:29.712500 2020] [ssl:warn] [pid 33] AH01909: 192.168.226.28:443:0 服务器证书不包含与服务器名称匹配的 ID
我不知道从这里去哪里。有什么想法吗?
【问题讨论】:
-
改用入口点脚本。搜索 entrypoint.sh docker 找到大量示例。
-
感谢您的回复。我实际上也尝试了这门课程并得到了相同的结果。它只是一遍又一遍地循环入口点脚本。下面 Vith 的答案如我所愿。我相信他的解决方案在将其作为入口点脚本实现时也可以工作。
标签: apache docker ssl https docker-compose