Docker 集装箱运行can';不要从另一个容器中撬起
我有4个容器(A、B、C、D),我想用docker-compose.yml文件运行它们 他们都使用相同的自定义网络Docker 集装箱运行can';不要从另一个容器中撬起,docker,docker-compose,Docker,Docker Compose,我有4个容器(A、B、C、D),我想用docker-compose.yml文件运行它们 他们都使用相同的自定义网络intranet intranet: driver: bridge 我的容器A正在使用 depends_on: - B - C - D 一次启动一切 我执行docker compose运行A,然后使用docker compose exec进入容器B 从容器B我可以ping C和ping D但是当我ping A时 XXX@XXX:/$ ping A
intranet
intranet:
driver: bridge
我的容器A正在使用
depends_on:
- B
- C
- D
一次启动一切
我执行docker compose运行A
,然后使用docker compose exec
进入容器B
从容器B我可以ping C
和ping D
但是当我ping A
时
XXX@XXX:/$ ping A
ping: A: No address associated with hostname
ping A的唯一方法是执行docker ps
,获取容器运行名称并使用它:ping projectname\u A\u run\u 1
是否有一种方法可以仅用aping a
从容器B ping容器a
version: '3.4'
services:
A:
image: "${DOCKER_REGISTRY_DOMAIN}/${DOCKER_BUILD_TAG_A}"
hostname: "A"
ports:
- "${LISTEN:-3001}:3000"
tty: true
environment:
- DEBUG
- DOCKER_COMPOSE=1
- MYSQL_DATABASE
- MYSQL_PASSWORD
- MYSQL_USER
- NODE_VERSION
- NVM_DIR
- PROJECT_NAME=A
- QT_QPA_PLATFORM=offscreen
- RAILS_ENV
- REDIS_URL=redis://redis:6379
- SHELL=/bin/bash
user: "${DOCKER_USER}"
working_dir: "${A_WORKING_DIR}"
volumes:
- "./tmp/capybara:/tmp/capybara:rw"
networks:
- intranet
depends_on:
- redis
- db
- B
entrypoint: "${A_ENTRYPOINT}"
B:
image: "${DOCKER_REGISTRY_DOMAIN}/${DOCKER_BUILD_TAG_B}"
cap_add:
- NET_ADMIN
- NET_RAW
- SETFCAP
- SYS_PTRACE
security_opt:
- apparmor:unconfined
- seccomp:unconfined
hostname: "B"
environment:
- DEBUG
- DOCKER_COMPOSE=1
- PROJECT_NAME=B
- REDIS_HOST=localhost
- REDIS_PORT=6379
- SHELL=/bin/bash
user: "${DOCKER_USER}"
working_dir: "${B_WORKING_DIR}"
networks:
- intranet
depends_on:
- redis
entrypoint: "${B_ENTRYPOINT}"
db:
image: mysql:5.7
restart: unless-stopped
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: "${MYSQL_DATABASE}"
MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
MYSQL_USER: "${MYSQL_USER}"
networks:
- intranet
volumes:
- ./mysql/db:/var/lib/mysql:rw
- ./mysql/initdb.d:/docker-entrypoint-initdb.d:ro
redis:
image: redis
ports:
- "${LISTEN:-6379}:6379"
restart: unless-stopped
networks:
- intranet
networks:
intranet:
driver: bridge
找到解决方案:
使用docker compose run——命名一个A
运行的容器将可以通过其名称访问我们可以看到您的
docker compose.yml
是什么样子吗?我用docker-compose.ymlca编辑了原始帖子。您可以显示容器B中的/etc/hosts
内容以及主机上的docker ps
输出吗?