我有这个docker文件,它正在按预期工作.我有连接到localhost上的mysql的PHP应用程序.
# 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"]
当我尝试将数据库作为单独的容器运行时,我的程序仍指向本地主机.当我连接到“ 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
这类似于这里提出的问题…
Connect to mysql in a docker container from the host
我不想从主机连接到MysqL,我需要从另一个容器连接.
最佳答案
首先,如果您不想从主机上调用MysqL 3306端口,则不应该公开它.现在,第二个链接已被弃用.您可以改用网络.我不确定是否要编写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