2016-12-31 103 views
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下初始化一個新的實例運行。

+0

您是否檢查過「碼頭日誌」的輸出? mysql日誌?您是否考慮過用戶權限問題?你有沒有考慮使用MySQL客戶端來運行你的SQL腳本? (例如'/ usr/bin/mysql mlg

+0

@mlg - 我確實看到它試圖創建這個新用戶,但root用戶密碼正常工作。我可以通過Dockerfile手動添加用戶,如果可能的話,我只是不想這樣做。 –

+0

sql腳本比創建用戶更好;它可能最終成爲啓動腳本的好東西。你預見到需要一些額外的啓動行動?它可能會幫助你完全解決這個問題。 – mlg

回答

0

爲我工作:停止docker並手動刪除所有包含以前版本的MySQL數據的文件夾。

另外:不要忘記添加一個MYSQL_DATABASE環境VAR或它不會創建您指定的用戶。