gpt4 book ai didi

docker - 从 docker 容器连接到 mysql 数据库

转载 作者:行者123 更新时间:2023-12-01 00:41:33 25 4
gpt4 key购买 nike

我有这个 docker 文件,它按预期工作。我有 php 应用程序连接到本地主机上的 mysql。

# cat Dockerfile
FROM tutum/lamp:latest
RUN rm -fr /app
ADD crm_220 /app/
ADD crmbox.sql /
ADD mysql-setup.sh /mysql-setup.sh
EXPOSE 80 3306
CMD ["/run.sh"]

当我尝试将数据库作为单独的容器运行时,我的 php 应用程序仍然指向 localhost。当我连接到“web”容器时,我无法连接到“mysql1”容器。
# cat docker-compose.yml
web:
build: .
restart: always
volumes:
- .:/app/
ports:
- "8000:8000"
- "80:80"
links:
- mysql1:mysql

mysql1:
image: mysql:latest
volumes:
- "/var/lib/mysql:/var/lib/mysql"
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: secretpass

我的 php 应用程序如何从另一个容器连接到 mysql?

这类似于这里提出的问题......

Connect to mysql in a docker container from the host

我不想从主机连接到 mysql,我需要从另一个容器连接。

最佳答案

首先,如果您不想从主机调用它,则不应公开 mysql 3306 端口。在第二个链接现在已弃用。您可以改用网络。我不确定 compose v.1 但在 v.2 中,通用 docker-compose 文件中的所有容器都在一个网络中( more about networks ),并且可以通过名称相互解析。 docker-compose v.2 文件示例:

version: '2'
services:
web:
build: .
restart: always
volumes:
- .:/app/
ports:
- "8000:8000"
- "80:80"
mysql1:
image: mysql:latest
volumes:
- "/var/lib/mysql:/var/lib/mysql"
environment:
MYSQL_ROOT_PASSWORD: secretpass

通过这样的配置,您可以通过名称解析 mysql 容器 mysql1在 web 容器内。

关于docker - 从 docker 容器连接到 mysql 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37363705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com