Kod*_*.Me 4 docker docker-compose
首先说我对 Docker 完全陌生,我还不熟悉 Docker 生态系统。
我尝试执行的是创建一个docker-composer.yml
在我的项目的本地开发环境中使用的。
我已经将wp-local-docker用于我的 WordPress 项目,但我也有一些旧项目具有不同的要求,因此,我做了自己的docker-compose.yml
. 我自己的代码docker-compose.yml
如下:
version: "3.4"
services:
database:
image: mysql:latest
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: appdb
MYSQL_USER: appuser
MYSQL_PASSWORD: password
volumes:
- $PWD/data/db:/var/lib/mysql
networks:
app_net:
ipv4_address: 192.168.50.10
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
links:
- database:mysql
ports:
- "8181:80"
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_USER: appuser
MYSQL_PASSWORD: password
PMA_HOST: mysql
PMA_PORT: 3306
PMA_USER: appuser
PMA_PASSWORD: password
networks:
app_net:
ipv4_address: 192.168.50.11
web:
build: $PWD/ApachePHP
depends_on:
- database
links:
- database:mysql
- mailcatcher
ports:
- "8080:80"
- "443:443"
volumes:
- $PWD/www:/var/www/html
- $PWD/ApachePHP/000-default.conf:/etc/apache2/sites-available/000-default.conf
environment:
- MYSQL_ROOT_PASSWORD=appuser
- MYSQL_ROOT_USER=password
networks:
app_net:
ipv4_address: 192.168.50.12
mailcatcher:
image: schickling/mailcatcher
ports:
- "1025:1025"
- "1080:1080"
environment:
MAILCATCHER_PORT: 1025
networks:
app_net:
ipv4_address: 192.168.50.13
networks:
app_net:
driver: bridge
ipam:
driver: default
config:
- subnet: 192.168.50.0/24
Run Code Online (Sandbox Code Playgroud)
我安装网络的原因是,当我尝试访问数据库服务器时,出现与网络相关的错误。
经过长时间的研究,我发现当我使用volumes
in database
service 时,我会返回错误。如果你尝试一下,你会发现当你尝试访问时,phpmyadmin
你会得到同样的错误。
再次,经过长时间的研究,我发现如果我设置了网络,我可以使用volumes
for database
。
现在,当我第一次运行时,这就像一个魅力。在 test 文件夹中,我的主机文件夹中的数据库文件位于路径下/data/db
然后我使用命令停止了 docker compose docker-compose stop
,然后我移动到另一个文件夹,在其中复制docker-compose.yml
了docker-compose up
.
不幸的是,这次我收到以下错误:
Creating network "corfurealestatedch_app_net" with driver "bridge"
ERROR: cannot create network 791b388ece09120f1138d48427969c23ded22c6fc73699b7f8c2c8e195b59586 (br-791b388ece09): conflicts with network a675c47764eba17e3338860f56512067df580cef31415906ec57fa3b64f3cdab (br-a675c47764eb): networks have overlapping IPv4
所以问题是我是否可以docker-compose.yml
以一种可以在我的本地项目中使用它而不与其他容器 IP 冲突的方式来设置它。
我知道,当然我可以为每个项目使用不同的 IP 范围/子网,但我认为这可能会在一段时间内变得一团糟。
关于如何解决这个问题的任何想法?
小智 7
从您在此处显示的错误来看,在我看来,docker 正在尝试使用名为 br-791b388ece09 的网桥驱动程序创建网络,然后该网桥驱动程序抱怨 IP 子网与网桥 br-a675c47764eb 重叠。
因此,首先使用以下方法检查您的可用网络:
$ docker network ls
Run Code Online (Sandbox Code Playgroud)
如果您看到 ID 为 a675c47764eb 的网桥,请确保在同一子网上创建新网桥之前先将其删除,用于此用途:
$ docker network rm a675c47764eb
Run Code Online (Sandbox Code Playgroud)
然后重新运行swarm的 docker 设置,它应该正确地创建网络。
或者,您可以使用不同的 IP 子网。将 192.168.50.x 替换为 192.168.51.x 之类的内容。这也应该可以解决您的问题。
小智 5
列出所有网络
$ip a
Run Code Online (Sandbox Code Playgroud)
如果您看到带有 br-a675c47764eb 的桥并且其状态为关闭,请将其删除
$brctl delbr br-a675c47764eb
Run Code Online (Sandbox Code Playgroud)
然后重启docker
$service docker restart
Run Code Online (Sandbox Code Playgroud)
再次运行 docker-compose
归档时间: |
|
查看次数: |
11706 次 |
最近记录: |