我正在尝试构建一个这样的结构:
application-1/
├── docker/
│ ├── apache2
│ ├── php
│ ├── docker-compose.yml
├── src/
└── other-framework-files/
application-2/
├── docker/
│ ├── apache2
│ ├── php
│ ├── docker-compose.yml
├── src/
└── other-framework-files/ 其中每个应用程序都是相同代码的完全独立的实例。我想要达到这样的地步,我可以让我的应用程序产生两次,并且我可以在两个“盒子”上独立开发。
这种结构对于一个实例来说工作得很好。
这么说吧,在我的文件夹中,我只有一个运行时使用的应用程序:
cd application-1/
docker-compose up -d这是我的docker-compose.yml文件
version: '3.7'
services:
webapp:
build:
context: ./php/
dockerfile: Dockerfile
container_name: webapp
image: php:7.4.2-fpm-alpine
volumes:
- ../:/srv/app
apache2:
build:
network: host
context: ./apache2/
dockerfile: Dockerfile
container_name: apache2
image: httpd:2.4.39-alpine
ports:
- 8080:80
volumes:
- ../:/srv/app
mysql:
container_name: mysql
image: mysql:latest
ports:
- 13306:3306
volumes:
- mysql:/var/lib/mysql:cached
environment:
MYSQL_ROOT_USER: root
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: content
MYSQL_USER: content
MYSQL_PASSWORD: content
redis:
container_name: redis
image: redis:5.0.6-alpine
ports:
- 16379:6379
volumes:
- redis:/data:cached
volumes:
mysql:
driver: local
redis:
driver: local这对于应用程序的一个实例来说工作得很好。
当我转到
http://123.123.123:8080 (my Digital Ocean droplet)我可以看到我的网站,一切都很好。
然而,如果我想把它复制到应用程序2并从那里运行它,我就不能让它工作。对于第二个应用程序,我尝试更改所有容器的名称,并像这样更改端口:
version: '3.7'
services:
webapp2:
build:
context: ./php/
dockerfile: Dockerfile
container_name: webapp2
image: php:7.4.2-fpm-alpine
volumes:
- ../:/srv/app
apache2-2:
build:
network: host
context: ./apache2/
dockerfile: Dockerfile
container_name: apache2-2
image: httpd:2.4.39-alpine
ports:
- 8081:80
volumes:
- ../:/srv/app
mysql2:
container_name: mysql2
image: mysql:latest
ports:
- 13309:3306
volumes:
- mysql:/var/lib/mysql:cached
environment:
MYSQL_ROOT_USER: root
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: content
MYSQL_USER: content
MYSQL_PASSWORD: content
redis2:
container_name: redis2
image: redis:5.0.6-alpine
ports:
- 16380:6379
volumes:
- redis:/data:cached
volumes:
mysql2:
driver: local
redis2:
driver: local通过这样做,我希望我可以得到两个完全独立的多容器composer应用程序。以便两个开发人员可以在同一个应用程序上单独工作。
但当我尝试像这样访问它时
http://123.123.123:8081它就是不加载任何东西。说网站不可用。它不会击中阿帕奇或者其他什么。它就是不起作用。
这里有人能给我指个方向吗?我不需要任何花哨的解决方案。这只是为了开发,只是为了开始,然后我可以尝试调整东西。
更新:
这是我的apache2配置。我已经将webapp更改为第二个实例的webapp2。
LoadModule deflate_module /usr/local/apache2/modules/mod_deflate.so
LoadModule proxy_module /usr/local/apache2/modules/mod_proxy.so
LoadModule proxy_fcgi_module /usr/local/apache2/modules/mod_proxy_fcgi.so
LoadModule rewrite_module modules/mod_rewrite.so
<VirtualHost *:80>
ServerName www.content.local
ServerAlias content.local
# Proxy .php requests to port 9000 of the php-fpm container
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://webapp:9000/srv/app/public/$1
DocumentRoot /srv/app/public
<Directory /srv/app/public>
DirectoryIndex index.php
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# Send apache logs to stdout and stderr
CustomLog /proc/self/fd/1 common
ErrorLog /proc/self/fd/2
</VirtualHost>发布于 2020-04-06 21:59:31
最重要的是,除了外部(主机)端口之外,您实际上不需要重命名任何东西,并且应该能够通过使用名称空间重用相同的docker-compose文件。命名空间是通过compose中的--project-name (或-p)标志实现的。并使用它编写命令,如下所示:
docker-compose -p customprojectname1 up -d在这里,您的customprojectname1实质上建立了名称空间-将其更改为其他名称空间用于您的第二个实例,等等。同样,您仍然必须更改主机端口,因为这些端口将发生冲突,但其他任何事情都不应该发生。
关于重命名所有内容的原始解决方案,您的问题很可能是在v2中忘记重命名的卷:
例如,对于mysql,您在下面将挂载点设置为mysql:
mysql2:
container_name: mysql2
image: mysql:latest
ports:
- 13309:3306
volumes:
- mysql:/var/lib/mysql:cached这是您的旧mysql卷-来自旧堆栈(未重命名)。redis也是如此。所以它需要是mysql2和redis2。同样,与其这样做,不如使用我上面提到的名称空间解决方案。
最后,确保检查每个衍生容器的容器日志,以防它们有更多线索。
https://stackoverflow.com/questions/61029701
复制相似问题