- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在下面的docker-compose.yml
文件中:
app:
build: ../../
dockerfile: docker/release/Dockerfile
links:
- dbc
volumes_from:
- webroot
environment:
DJANGO_SETTINGS_MODULE: someapp.settings.release
MYSQL_HOST: db
MYSQL_USER: user1
MYSQL_PASSWORD: passwd
command:
- uwsgi
- "--socket /var/www/someapp/someapp.sock"
- "--chmod-socket=666"
- "--module someapp.wsgi"
- "--master"
- "--die-on-term"
dbc:
image: mysql:5.6
hostname: db
expose:
- "3386"
environment:
MYSQL_DATABASE: someapp
MYSQL_USER: user1
MYSQL_PASSWORD: passwd
MYSQL_ROOT_PASSWORD: passwd
app
服务依赖于
dbc
服务。
links:
- dbc
wait_for host={{ probe_host }}
port={{ probe_port }}
links
到底能确保什么?
最佳答案
Docker链接仅对于legacy "default bridge network" mode是必需的。 Docker Compose将automatically create a "user-defined bridge network"和的links:
不再是docker-compose.yml
文件所必需的。
实际上,这意味着links:
的行为与 depends_on:
完全相同。如果您运行docker-compose up app
,它也会为您启动dbc
。 Compose将在开始启动应用程序之前开始启动数据库,但是它无法知道数据库已完成启动。通常,您使用诸如wait-for-it之类的脚本来确保数据库已准备就绪,或者设置 restart:
策略,如果尚无法访问数据库,则崩溃。
为了使容器a
到达同一b
文件中的容器docker-compose.yml
,唯一的要求是它们必须位于同一网络上。最简单的方法是根本不拥有networks:
块。如果两者都相同,则它们必须具有相同的名称,如果只有一个,则必须包含default
。服务名称(在您的示例中为app
和dbc
)可以用作普通主机名,而无需您进行进一步配置。设置hostname:
对网络没有影响。 container_name:
将为容器提供其他名称;两者都不是必需的。
无论其他设置如何,容器间通信始终使用容器内服务器进程正在侦听的任何端口。既不需要ports:
也不需要expose:
;如果您具有ports:
并且两个端口号不同,则将连接到第二个端口号。对于显示的mysql:5.6
图像,您将始终连接到端口3306(公开其他端口号无效)。
在大多数情况下,您永远不要指定links:
,expose:
,hostname:
或container_name:
;它们对于联网是不必要的,并且不设置容器的有用属性。我还建议仅使用默认的网络设置,不要在文件中的任何位置指定networks:
。
关于docker - “links”指令如何在docker-compose中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58478593/
我是一名优秀的程序员,十分优秀!