在dockerfile中获取容器名称

时间:2020-07-28 15:29:22

标签: docker docker-compose dockerfile

我想获取容器名称。

services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: my_secret_pw_shh
      MYSQL_DATABASE: test_db
      MYSQL_USER: devuser
      MYSQL_PASSWORD: devpass
    ports:
      - "9906:3306"
  web:
    build: ./php-app
    container_name: php_web
    depends_on:
      - db
    volumes:
      - ./php/:/var/www/html/
    ports:
      - "8100:80"
    stdin_open: true
    tty: true

在我的dockerfile php-app中,我想获取php_web

1 个答案:

答案 0 :(得分:2)

这是一个可能的解决方法-它实际上并不会自动从Dockerfile内部访问容器的名称-但它允许您在单个位置(.env文件)中定义该名称,然后访问docker-compose.yml中的那个变量,甚至将其传递给Dockerfile,以便它也可以使用它。

以下是解决方法:

在与.env文件相同的目录中创建一个名为docker-compose.yml的文件,并在其中写入容器名称:

APP_CONTAINER_NAME="php_web"

按如下所示更改docker-compose.yml文件:

version: "3.8"

services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: my_secret_pw_shh
      MYSQL_DATABASE: test_db
      MYSQL_USER: devuser
      MYSQL_PASSWORD: devpass
    ports:
      - "9906:3306"
  web:
    build:
        context: ./php-app
        args:
            APP_CONTAINER_NAME: ${APP_CONTAINER_NAME}
    container_name: ${APP_CONTAINER_NAME}
    depends_on:
      - db
    volumes:
      - ./php/:/var/www/html/
    ports:
      - "8100:80"
    stdin_open: true
    tty: true

php-app/Dockerfile内,最好在顶部附近,添加以下行:

ARG APP_CONTAINER_NAME

您现在可以在Dockerfile中访问此变量。

例如,要在容器内创建一个名称与容器相同的文件,请执行以下操作:

RUN touch ${APP_CONTAINER_NAME}