我试图让一个web服务器容器与mysql服务器容器连接,但是当我试图连接mysql服务器时,比如phpmyadmin,我的主机就不知道了。
这里是我的mysql docker-compose.yml
version: '3'
services:
mysqldb:
image: mysql
container_name: mysql
restart: always
env_file:
- ".env"
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
ports:
- "3306:3306"
expose:
- "3306"
volumes:
- "./data/mysql:/var/lib/mysql"这里是我的web服务器容器
version: '3'
services:
web:
image: nginx:latest
container_name: web
ports:
- "80:80"
- "443:443"
restart: always
volumes:
- "./etc/nginx/nginx.conf:/etc/nginx/nginx.conf"
- "./etc/nginx/sites-enabled:/etc/nginx/sites-enabled"
- "./etc/nginx/default.conf:/etc/nginx/conf.d/default.conf"
- "./etc/ssl:/etc/ssl"
- "./web:/var/www/html"
- "./data/domains:/domains"
depends_on:
- php
external_links:
- "mysql:mysql"
php:
image: nanoninja/php-fpm
restart: always
volumes:
- "./etc/php/php.ini:/usr/local/etc/php/conf.d/php.ini"
- "./web:/var/www/html"
- "./data/domains:/domains"
myadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
ports:
- "8080:80"
environment:
- PMA_ARBITRARY=1
- PMA_HOST=mysql
restart: always
external_links:
- "mysql:mysql"我正确地设置了对接文件吗?
编辑1:
root@server:~/docker# docker ps | grep mysql
0d49167a6aae mysql "docker-entrypoint..." About an hour ago Up About an hour 0.0.0.0:3306->3306/tcp mysql发布于 2017-08-07 05:33:48
问题是您使用的是两个不同的组合文件。如果在同一个网络中没有两个容器,external_links就不再工作了。见下面的文档
如果您使用的是版本2或更高的文件格式,则外部创建的容器必须连接到至少一个与链接到它们的服务相同的网络。从版本2开始,链接是一个遗留选项。我们建议使用网络代替。 当使用(第3版)复合文件以群模式部署堆栈时,此选项将被忽略。
使用主机IP的
因为mysql运行在映射为3306的主机上。在撰写文件中,可以添加
extra_hosts:
- "mysql:<MACHINEIP>"MachineIP是主机的IP。同样,这也不是推荐的方法。
使用外部网络的
docker-compose允许您定义网络。因此,您可以在你的mysql撰写文件中定义它,然后将它映射为您的其他停靠器-组合中的一个外部网络,并可以使用它的名称mysqldb访问该文件。
请参阅此url https://docs.docker.com/compose/networking/#using-a-pre-existing-network
https://stackoverflow.com/questions/45539780
复制相似问题