Docker 集装箱运行can';不要从另一个容器中撬起

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

我有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
    ping: A: No address associated with hostname 
ping A的唯一方法是执行
docker ps
,获取容器运行名称并使用它:
ping projectname\u A\u run\u 1

是否有一种方法可以仅用a
ping 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
输出吗?