3
這是我看到的時候,我在由搬運工,撰寫創建容器:mysql_user泊塢窗,構成
mysql> SELECT user FROM mysql.user;
+------+
| user |
+------+
| root |
+------+
1 row in set (0.00 sec)
mysql> exit
Bye
[email protected]:/# echo $MYSQL_USER
dbuser
dbuser
沒有出現在用戶表。
在docker-compose.yml
我有這樣的:
version: '2'
services:
db:
image: mysql:latest
environment:
MYSQL_DATABASE: mydb
MYSQL_USER: dbuser
MYSQL_PASSWORD: userpass
MYSQL_ROOT_PASSWORD: password
ports:
- "3306"
volumes:
- ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
- my-datavolume:/var/lib/mysql
web:
# build: . # Look in the current directory for a Dockerfile and build images using it
image: me/tomcat:v1
depends_on: # Link web container to db container
- db
environment: # Set up environment variables
MYSQL_DATABASE: mydb
MYSQL_ROOT_PASSWORD: password
ports:
- "8080:8080" # Forwards the exposed port 8080 on the container to port 8080 on the host machine
volumes:
my-datavolume:
我預計會自動創建dbuser的,但這種情況並未發生。
我也有一個sql文件來創建我的數據庫和表,如果他們不存在,但現在tomcat無法連接到我的數據庫。
與此相同的症狀question,但我已經使用字典作爲我的用戶名/密碼。
UPDATE:
我越來越接近。如果我做的:
docker-compose exec db /bin/bash
然後執行:
/docker-entrypoint-initdb.d/create_users.sh
然後我做到這一點時,我看到:
mysql> SHOW GRANTS for dbuser;
+---------------------------------------------+
| Grants for [email protected]% |
+---------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'dbuser'@'%' |
+---------------------------------------------+
然後我能到我的應用程序部署到我的Tomcat服務器和我沒有得到有關dbuser被拒絕訪問的錯誤。
那麼,我爲什麼要運行此命令自己,應該由碼頭工人,撰寫根據mysql docker docs下初始化一個新的實例運行。
您是否檢查過「碼頭日誌」的輸出? mysql日誌?您是否考慮過用戶權限問題?你有沒有考慮使用MySQL客戶端來運行你的SQL腳本? (例如'/ usr/bin/mysql path/to/script.sql') – mlg
@mlg - 我確實看到它試圖創建這個新用戶,但root用戶密碼正常工作。我可以通過Dockerfile手動添加用戶,如果可能的話,我只是不想這樣做。 –
sql腳本比創建用戶更好;它可能最終成爲啓動腳本的好東西。你預見到需要一些額外的啓動行動?它可能會幫助你完全解決這個問題。 – mlg