我已成功在 digitalocean Droplet上安装了docker,下面显示了我的 docker-compose.yml 配置:
version: '2.1'
services:
mysql:
build:
context: ./docker/mysql
image: mysql:latest
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: root_pass
MYSQL_USER: root
MYSQL_PASSWORD: root_pass
volumes:
- mysqldata:/var/lib/mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
links:
- mysql:db
environment:
MYSQL_USERNAME: root
MYSQL_ROOT_PASSWORD: root_pass
restart: always
ports:
- 8080:80
一旦我登上了docker服务,一切正常,你可以通过下面的屏幕截图看到。
我可以使用我的用户凭据完全访问终端内的mysql数据库。
但问题是,当我尝试使用droplet_ip:8080
访问phpmyadmin时,它说:
#1045 - Access denied for user 'root'@'172.18.0.4' (using password: YES)
在这里我也使用了相同的用户名(root)密码(root_pass)。
对此问题的任何建议都将不胜感激。谢谢。
答案 0 :(得分:3)
以下为我工作
version: '3.1'
volumes:
mysql-volume:
services:
mysql:
image: mysql
container_name: mysql
volumes:
- mysql-volume:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: db
MYSQL_USER: user
MYSQL_PASSWORD: supersecret
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
environment:
PMA_HOST: mysql
MYSQL_USER: user
MYSQL_PASSWORD: supersecret
ports:
- 80:80
depends_on:
- mysql
不要混淆root用户和MySQL用户。在上面的例子中,我使用MySQL用户使用phpadmin登录。如果你想使用root用户登录,你不必指定MySQL用户,它看起来像这样(你不需要为phpmyadmin指定用户,因为它总是root用户):
version: '3.1'
volumes:
mysql-volume:
services:
mysql:
image: mysql
container_name: mysql
volumes:
- mysql-volume:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: db
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
environment:
PMA_HOST: mysql
MYSQL_ROOT_PASSWORD: rootpass
ports:
- 80:80
depends_on:
- mysql
同样非常重要的是,当您想要重新创建整个设置时,请删除您的mysql卷。 (docker volume rm ..
)。因为在进行更改后,您的mysql可能会再次使用相同的卷启动。
答案 1 :(得分:0)
我遇到了访问被拒绝的错误,因为我的密码中有一个美元符号,docker撰写文件将其解析为变量替换(我只见过${}
语法),您在this页面上将显示为“同时支持$VARIABLE
和${VARIABLE}
语法。
因此,例如,如果我在docker compose file: hello$world
中使用此密码作为我的数据库密码,则将替换world变量,当然我没有'world'变量,该密码将被设置在这种情况下,将是hello
,因此在不知道docker compose语法的情况下,您将尝试使用hello$world
登录,并且将拒绝您访问。