【发布时间】:2016-04-21 01:33:50
【问题描述】:
我在 docker-compose.yml 中有一个运行 mariadb 的(全局)容器和一个 php-fpm 容器。它们是链接的,但是db容器的ip和端口不在php-fpm的环境变量中。
我是这样启动 mariadb 容器的:
$ docker run --name db -e MYSQL_ROOT_PASSWORD=.... -dP mariadb
我的 docker-compose.yml 看起来像这样:
version: "2"
services:
nginx:
build:
context: .
dockerfile: docker/nginx/Dockerfile
ports:
- 80
links:
- fpm
volumes_from:
- app
fpm:
build:
context: .
dockerfile: docker/fpm/Dockerfile
external_links:
- db
volumes_from:
- app
app:
build:
context: .
dockerfile: docker/app/Dockerfile
volumes:
# - /app
- .:/app:ro
我的 fpm Dockerfile:
FROM php:fpm
RUN docker-php-ext-install pdo pdo_mysql
phpinfo()中的环境变量
PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME db14e2928ed6
PHP_INI_DIR /usr/local/etc/php
PHP_EXTRA_CONFIGURE_ARGS --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data
GPG_KEYS 1A4E8B7277C42E53DBA9C7B9BCAA30EA9C0D5763
PHP_VERSION 7.0.5
PHP_FILENAME php-7.0.5.tar.xz
PHP_SHA256 c41f1a03c24119c0dd9b741cdb67880486e64349fc33527767f6dc28d3803abb
HOME /var/www
USER www-data
编辑:
我尝试链接到一个 ubuntu 容器以确保 php-fpm 不会出错。它作为一个临时容器工作,但是当我将它作为 external_link 放在 docker-compose.yaml 中时,它也会从 env 和 /etc/hosts 中消失。
version: "2"
services:
test:
image: ubuntu
external_links:
- db
【问题讨论】:
-
参考说明“注意:如果您使用的是版本 2 文件格式,则外部创建的容器必须连接到至少一个与链接到它们的服务相同的网络。 "
-
版本 2 撰写文件使用用户定义的网络,不再使用
/etc/hosts。有一个嵌入式 DNS 服务器来处理名称解析。 -
如何使用嵌入式 DNS 服务器访问 db?我无法解决
db($ netcat db 3306nc: getaddrinfo: Name or service not known) -
@dnephin 如果你能分享回答这个问题,那就太好了。
标签: docker docker-compose