【发布时间】:2017-05-27 20:07:42
【问题描述】:
我正在建立一个通用的公共数据库,我可以与其他容器链接到该数据库。我在使用docker-compose 和docker run 时遇到了不同的结果。
docker-compose.yml
mysql:
image: mariadb:10.1
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: root-secret
MYSQL_USER: dbuser
MYSQL_PASSWORD: my-secret
volumes:
- ./conf:/etc/mysql/conf.d
- ./data:/var/lib/mysql
- ./logs:/var/log/mysql
pma:
image: phpmyadmin/phpmyadmin
links:
- mysql:db
ports:
- 8088:80
environment:
MYSQL_ROOT_PASSWORD: root-secret
MYSQL_USER: dbuser
MYSQL_PASSWORD: my-secret
我正在运行的 docker 命令是:
docker run -d -P --name mysql -v conf:/etc/mysql/conf.d -v data:/var/lib/mysql \
-v logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD=root-secret \
-e MYSQL_USER=dbuser -e MYSQL_PASSWORD=my-secret -p 3306:3306 mariadb:10.1
docker run -d --name pma --link mysql:db -e MYSQL_ROOT_PASSWORD=root-secret \
-e MYSQL_USER=dbuser -e MYSQL_PASSWORD=my-secret -p 8088:80 phpmyadmin/phpmyadmin
使用docker-compose up -d 时,一切正常,我的主机的数据目录充满了数据库文件。此外,phpmyadmin 能够毫无问题地连接到数据库容器。
使用 docker 命令时,主机的数据目录保持为空,数据存储在容器中。 phpmyadmin 在尝试登录时也会给我“拒绝访问”。
谁能告诉我为什么在使用 docker-compose 但不能使用 docker 时数据卷正确安装并且 phpmyadmin 能够通信?
【问题讨论】:
-
可能只是您映射卷的方式有误。在 docker-compose 文件中使用 "./data:.." ,在 docker run 命令中使用 "data:.." 。所以它取决于你运行 docker run 命令的位置/你的 docker-compose.yml 文件所在的位置。对于 docker-compose.yml,所有路径都相对于文件所在的位置。
-
两个命令都在同一个目录中执行。当我尝试在 docker 命令中使用 ./data 时,它给我一个错误,即路径由于前导点而无效。
标签: docker phpmyadmin docker-compose mariadb