我使用Strapi
和建立网站Gatsby
,当我尝试连接到远程数据库时一切正常,但是我试图在容器内创建数据库,到目前为止还算不上运气。本质上,我所做的是创建以下内容docker-compose
:
version: '3'
services:
backend:
container_name: myapp_backend
build: ./backend/
ports:
- '3002:3002'
volumes:
- ./backend:/usr/src/myapp/backend
- /usr/src/myapp/backend/node_modules
environment:
- APP_NAME=myapp_backend
- DATABASE_CLIENT=mysql
- DATABASE_HOST=db
- DATABASE_PORT=3307
- DATABASE_NAME=myapp_db
- DATABASE_USERNAME=johnny
- DATABASE_PASSWORD=stecchino
- DATABASE_SSL=false
- DATABASE_AUTHENTICATION_DATABASE=myapp_db
- HOST=localhost
depends_on:
- db
restart: always
db:
container_name: myapp_mysql
image: mysql:5.7
volumes:
- ./db.sql:/docker-entrypoint-initdb.d/db.sql
restart: always
ports:
- 3307:3307
environment:
MYSQL_ROOT_PASSWORD: 5!JF6!FgAkvt
MYSQL_DATABASE: myapp_db
MYSQL_USER: johnny
MYSQL_PASSWORD: stecchino
command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci --init-connect='SET NAMES UTF8;' --innodb-flush-log-at-trx-commit=0
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: 'myapp_phpmyadmin'
links:
- db
environment:
PMA_HOST: db
PMA_PORT: 3307
ports:
- '8081:80'
volumes:
- /sessions
depends_on:
- db
frontend:
container_name: myapp_frontend
build: ./frontend/
ports:
- '3001:3001'
depends_on:
- backend
volumes:
- ./frontend:/usr/src/myapp/frontend
该backend
服务包含的Strapi
应用程序,该db
服务包含了mysql
它运行在端口上的实例3307
“的原因是3306已在使用。
然后,我还安装了phpmyadmin
,最后但并非最不重要的是该Gastby
站点。当我使用运行时docker-compose up --build
,尝试使用以下命令访问phpmyadmin:
http://localhost:8081/index.php
具有以下凭据:
用户:johnny pwd:牙签
我得到:
MySQL mysqli :: real_connect():( HY000 / 2002):连接被拒绝
现在,我做了修复这种情况是端口3306,而不是3307传递给backend
和phpmyadmin
服务。神奇的是,一切正常。但为什么?我已将容器和主机映射到3307 ...
这里发生两件事。
这是因为您从未告诉过mysql容器要在端口3307上运行。默认配置是在3306上运行。
当然可以。这是因为当您在同一docker-compose文件中定义多个服务时,它们会在同一网络上启动。这意味着他们可以看到并连接到彼此的内部端口,而无需外部端口绑定,例如3306:3306
我建议仅对要在docker环境之外访问的服务(例如UI)保留端口绑定,而对于内部组件,只需要这样公开端口
expose:
- 3306
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句